[ Index ]

PHP Cross Reference of Moodle 1.9.3 [Build 15-Oct-2008]

title

Body

[close]

/search/documents/ -> techproject_document.php (source)

   1  <?php
   2  /**
   3  * Global Search Engine for Moodle
   4  *
   5  * @package search
   6  * @category core
   7  * @subpackage document_wrappers
   8  * @author Michael Campanis, Valery Fremaux [valery.fremaux@club-internet.fr] > 1.8
   9  * @date 2008/03/31
  10  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  11  *
  12  * document handling for techproject activity module
  13  */
  14  
  15  /**
  16  * requires and includes
  17  */
  18  require_once("$CFG->dirroot/search/documents/document.php");
  19  require_once("$CFG->dirroot/mod/techproject/lib.php");
  20  
  21  /**
  22  * a class for representing searchable information
  23  *
  24  */
  25  class TechprojectEntrySearchDocument extends SearchDocument {
  26  
  27      /**
  28      * constructor
  29      *
  30      */
  31      public function __construct(&$entry, $course_id, $context_id) {
  32          // generic information
  33          $doc->docid     = $entry['id'];
  34          $doc->documenttype  = SEARCH_TYPE_TECHPROJECT;
  35          $doc->itemtype      = $entry['entry_type'];
  36          $doc->contextid     = $context_id;
  37  
  38          
  39          $doc->title     = $entry['abstract'];
  40          $doc->author    = ($entry['userid']) ? $entry['author'] : '';
  41          $doc->contents  = strip_tags($entry['description']);
  42          $doc->date      = '';
  43          
  44          $doc->url       = techproject_make_link($entry['projectid'], $entry['id'], $entry['entry_type'], $entry['groupid']);
  45          
  46          // module specific information
  47          $data->techproject = $entry['projectid'];
  48          
  49          parent::__construct($doc, $data, $course_id, $entry['groupid'], $entry['userid'], PATH_FOR_SEARCH_TYPE_TECHPROJECT);
  50      } //constructor
  51  } //TechprojectEntrySearchDocument
  52  
  53  /**
  54  * constructs a valid link to a description detail
  55  *
  56  */
  57  function techproject_make_link($techproject_id, $entry_id, $entry_type, $group_id) {
  58      global $CFG;
  59      return $CFG->wwwroot.'/mod/techproject/view.php?view=view_detail&amp;id='.$techproject_id.'&amp;objectId='.$entry_id.'&amp;objectClass='.$entry_type.'&amp;group='.$group_id;
  60  } //techproject_make_link
  61  
  62  /**
  63  * search standard API
  64  *
  65  */
  66  function techproject_iterator() {
  67      $techprojects = get_records('techproject');
  68      return $techprojects;    
  69  } //techproject_iterator
  70  
  71  /**
  72  * search standard API
  73  * @param techproject a techproject instance
  74  * @return an array of collected searchable documents
  75  */
  76  function techproject_get_content_for_index(&$techproject) {
  77      $documents = array();
  78      if (!$techproject) return $documents;
  79  
  80      $requirements = techproject_get_entries($techproject->id, 'requirement');
  81      $specifications = techproject_get_entries($techproject->id, 'specification');
  82      $tasks = techproject_get_tasks($techproject->id);
  83      $milestones = techproject_get_entries($techproject->id, 'milestone');
  84      $deliverables = techproject_get_entries($techproject->id, 'deliverable');
  85      $coursemodule = get_field('modules', 'id', 'name', 'techproject');
  86      $cm = get_record('course_modules', 'course', $techproject->course, 'module', $coursemodule, 'instance', $techproject->id);
  87      $context = get_context_instance(CONTEXT_MODULE, $cm->id);
  88  
  89      $entries = @array_merge($requirements, $specifications, $milestones, $deliverables);
  90      if ($entries){
  91          foreach($entries as $anEntry) {
  92              if ($anEntry) {
  93                  if (strlen($anEntry->description) > 0) {
  94                      $anEntry->author = '';
  95                      $documents[] = new TechprojectEntrySearchDocument(get_object_vars($anEntry), $techproject->course, $context->id);
  96                  } 
  97              } 
  98          } 
  99      }
 100      if ($tasks){
 101          foreach($tasks as $aTask) {
 102              if ($aTask) {
 103                  if (strlen($aTask->description) > 0) {
 104                      if ($aTask->assignee){
 105                          $user = get_record('user', 'id', $aTask->assignee);
 106                          $aTask->author = $user->firstname.' '.$user->lastname;
 107                      }
 108                      $documents[] = new TechprojectEntrySearchDocument(get_object_vars($aTask), $techproject->course, $context->id);
 109                  } 
 110              } 
 111          } 
 112      }
 113      return $documents;
 114  } //techproject_get_content_for_index
 115  
 116  /**
 117  * returns a single techproject search document based on a techproject_entry id and itemtype
 118  *
 119  */
 120  function techproject_single_document($id, $itemtype) {
 121      switch ($itemtype){
 122          case 'requirement':{
 123              $entry = get_record('techproject_requirement', 'id', $id);
 124              $entry->author = '';
 125              break;
 126          }
 127          case 'specification':{
 128              $entry = get_record('techproject_specification', 'id', $id);
 129              $entry->author = '';
 130              break;
 131          }
 132          case 'milestone':{
 133              $entry = get_record('techproject_milestone', 'id', $id);
 134              $entry->author = '';
 135              break;
 136          }
 137          case 'deliverable':{
 138              $entry = get_record('techproject_deliverable', 'id', $id);
 139              $entry->author = '';
 140              break;
 141          }
 142          case 'task':{
 143              $entry = get_record('techproject_task', 'id', $id);
 144              if ($entry->assignee){
 145                  $user = get_record('user', 'id', $entry->assignee);
 146                  $entry->author = $user->firstname.' '.$user->lastname;
 147              }
 148              break;
 149          }
 150      }
 151      $techproject_course = get_field('techproject', 'course', 'id', $entry->projectid);
 152      $coursemodule = get_field('modules', 'id', 'name', 'techproject');
 153      $cm = get_record('course_modules', 'course', $techproject_course, 'module', $coursemodule, 'instance', $entry->projectid);
 154      $context = get_context_instance(CONTEXT_MODULE, $cm->id);
 155      $entry->type = $itemtype;
 156      $techproject = get_record('techproject', 'id', $requirement->projectid);
 157      return new TechprojectEntrySearchDocument(get_object_vars($anEntry), $techproject->course, $context->id);
 158  } //techproject_single_document
 159  
 160  /**
 161  * dummy delete function that packs id with itemtype.
 162  * this was here for a reason, but I can't remember it at the moment.
 163  *
 164  */
 165  function techproject_delete($info, $itemtype) {
 166      $object->id = $info;
 167      $object->itemtype = $itemtype;
 168      return $object;
 169  } //techproject_delete
 170  
 171  /**
 172  * returns the var names needed to build a sql query for addition/deletions
 173  *
 174  */
 175  // TODO : what should we do there ?
 176  function techproject_db_names() {
 177      //[primary id], [table name], [time created field name], [time modified field name]
 178      return array(
 179          array('id', 'techproject_requirement', 'created', 'modified', 'requirement'),
 180          array('id', 'techproject_specification', 'created', 'modified', 'specification'),
 181          array('id', 'techproject_task', 'created', 'modified', 'task'),
 182          array('id', 'techproject_milestone', 'created', 'modified', 'milestone'),
 183          array('id', 'techproject_deliverable', 'created', 'modified', 'deliverable')
 184      );
 185  } //techproject_db_names
 186  
 187  /**
 188  * get a complete list of entries of one particular type
 189  * @param techprojectId the project instance
 190  * @param type the entity type
 191  * @return an array of records
 192  */
 193  function techproject_get_entries($techproject_id, $type) {
 194      global $CFG;
 195      
 196      $query = "
 197          SELECT 
 198              e.id, 
 199              e.abstract, 
 200              e.description,
 201              e.projectid,
 202              e.groupid,
 203              e.userid,
 204              '$type' AS entry_type
 205          FROM 
 206              {$CFG->prefix}techproject_{$type} AS e
 207          WHERE 
 208              e.projectid = '{$techproject_id}'
 209      ";
 210      return get_records_sql($query);
 211  } //techproject_get_entries
 212  
 213  /**
 214  * get the task list for a project instance
 215  * @param techprojectId the project
 216  * @return an array of records that represent tasks
 217  */
 218  function techproject_get_tasks($techproject_id) {
 219      global $CFG;
 220      
 221      $query = "
 222          SELECT 
 223              t.id, 
 224              t.abstract, 
 225              t.description,
 226              t.projectid,
 227              t.groupid,
 228              t.owner as userid,
 229              u.firstname,
 230              u.lastname,
 231              'task' as entry_type
 232          FROM 
 233              {$CFG->prefix}techproject_task AS t
 234          LEFT JOIN
 235              {$CFG->prefix}user AS u
 236          ON
 237              t.owner = u.id            
 238          WHERE 
 239              t.projectid = '{$techproject_id}'
 240          ORDER BY 
 241              t.taskstart ASC
 242      ";
 243      return get_records_sql($query);
 244  } //techproject_get_tasks
 245  
 246  /**
 247  * this function handles the access policy to contents indexed as searchable documents. If this 
 248  * function does not exist, the search engine assumes access is allowed.
 249  * When this point is reached, we already know that : 
 250  * - user is legitimate in the surrounding context
 251  * - user may be guest and guest access is allowed to the module
 252  * - the function may perform local checks within the module information logic
 253  * @param path the access path to the module script code
 254  * @param entry_type the information subclassing (usefull for complex modules, defaults to 'standard')
 255  * @param this_id the item id within the information class denoted by entry_type. In techprojects, this id 
 256  * points to the techproject instance in which all resources are indexed.
 257  * @param user the user record denoting the user who searches
 258  * @param group_id the current group used by the user when searching
 259  * @return true if access is allowed, false elsewhere
 260  */
 261  function techproject_check_text_access($path, $entry_type, $this_id, $user, $group_id, $context_id){
 262      global $CFG;
 263      
 264      include_once("{$CFG->dirroot}/{$path}/lib.php");
 265  
 266      // get the techproject object and all related stuff
 267      $techproject = get_record('techproject', 'id', $this_id);
 268      $course = get_record('course', 'id', $techproject->course);
 269      $module_context = get_record('context', 'id', $context_id);
 270      $cm = get_record('course_modules', 'id', $module_context->instanceid);
 271      if (!$cm->visible and !has_capability('moodle/course:viewhiddenactivities', $module_context)) return false;
 272      
 273      //group consistency check : checks the following situations about groups
 274      // if user is guest check access capabilities for guests :
 275      // guests can see default project, and other records if groups are liberal
 276      // TODO : change guestsallowed in a capability
 277      if (isguest() && $techproject->guestsallowed){
 278          if ($group_id && groupmode($course, $cm) == SEPARATEGROUPS)
 279              return false;
 280          return true;
 281      }
 282      
 283      // trap if user is not same group and groups are separated
 284      $current_group = get_current_group($course->id);
 285      if ((groupmode($course) == SEPARATEGROUPS) && $group_id != $current_group && $group_id) return false;
 286      
 287      //trap if ungroupedsees is off in strict access mode and user is not teacher
 288      if ((groupmode($course) == SEPARATEGROUPS) && !$techproject->ungroupedsees && !$group_id && isteacher($user->id)) return false;
 289      
 290      return true;
 291  } //techproject_check_text_access
 292  
 293  /**
 294  * this call back is called when displaying the link for some last post processing
 295  *
 296  */
 297  function techproject_link_post_processing($title){
 298       return mb_convert_encoding($title, 'UTF-8', 'auto');
 299  }
 300  
 301  ?>


Generated: Wed Jan 14 11:33:29 2009 Cross-referenced by PHPXref 0.7