You are here

opigno_certificate_app.module in Opigno Certificate App 7

File

opigno_certificate_app.module
View source
<?php

function opigno_certificate_app_menu() {
  $items = array();
  $items['node/%node/user/%user/certificate'] = array(
    'title' => 'Certificate',
    'description' => 'Display earned certificate for this node',
    'page callback' => 'certificate_single',
    'page arguments' => array(
      3,
      1,
    ),
    'access callback' => 'certificate_can_access_certificate',
    'access arguments' => array(
      1,
      3,
      TRUE,
    ),
    'file' => 'certificate.pages.inc',
    'file path' => drupal_get_path('module', 'certificate'),
    'type' => MENU_CALLBACK,
  );
  $items['admin/opigno/students/add/certificate'] = array(
    'title' => "Add Certificate",
    'description' => "Create a new certificate",
    'page callback' => 'opigno_certificate_app_redirect_to_node_creation_form',
    'access arguments' => array(
      'create certificate content',
    ),
  );
  return $items;
}
function opigno_certificate_app_redirect_to_node_creation_form() {
  drupal_goto('node/add/certificate');
}
function opigno_certificate_app_menu_alter(&$items) {
  $items['node/%node/certificate']['access callback'] = 'opigno_certificate_app_certificate_exists';
  $items['node/%node/certificate']['type'] = MENU_LOCAL_ACTION;
}
function opigno_certificate_app_certificate_exists($node) {
  if (isset($node->certificate['node_settings']['manual']['manual'])) {
    if ($node->certificate['node_settings']['manual']['manual'] === "-1") {
      return false;
    }
    else {
      return certificate_can_access_certificate($node);
    }
  }
  else {
    return false;
  }
}
function opigno_certificate_app_access_certificate($node, $account) {
  global $user;
  if ($user->uid != $account->uid && !user_access('view all user certificates')) {
    drupal_set_message(t("You do not have access to viewing others certificates"));
    return FALSE;
  }
  if (opigno_certificate_app_user_passed($node->nid, $account->uid)) {
    return TRUE;
  }
  return FALSE;
}
function opigno_certificate_app_get_certificate_path($nodeid, $userid) {
  global $user;
  if ($user->uid != $userid && !user_access('view all user certificates')) {
    return "";
  }
  if (opigno_certificate_app_user_passed($nodeid, $userid)) {
    return 'node/' . $nodeid . '/user/' . $userid . '/certificate';
  }
  return "";
}
function opigno_certificate_app_node_view($node, $view_mode, $langcode) {
  if (isset($node->content['certificate']['#markup'])) {
    if (isset($node->certificate['node_settings']['manual']['manual'])) {
      $node->content['certificate']['#markup'] = "";
    }
  }
}
function opigno_certificate_app_user_passed($nid, $uid) {
  $node = node_load($nid);
  if (module_exists("opigno_quiz_app")) {
    if (isset($node->opigno_class_courses[LANGUAGE_NONE])) {
      foreach ($node->opigno_class_courses[LANGUAGE_NONE] as $index => $cid) {
        if (!opigno_quiz_app_user_passed($cid['target_id'], $uid)) {
          return FALSE;
        }
      }
    }
    else {
      if (!opigno_quiz_app_user_passed($nid, $uid)) {
        return FALSE;
      }
    }
  }
  if (isset($node->certificate['node_settings']['manual']['manual'])) {
    if ($node->certificate['node_settings']['manual']['manual'] === "-1") {
      return FALSE;
    }
  }
  return TRUE;
}
function opigno_certificate_app_token_info() {
  $node['certificate_granted_node'] = array(
    'name' => t("Certificate date"),
    'description' => t("The day the certificate was granted"),
    'value' => "coisa",
  );
  $node['list_of_courses'] = array(
    'name' => t("The list of courses"),
    'description' => t("The list of courses"),
  );
  return array(
    'tokens' => array(
      'node' => $node,
    ),
  );
}
function opigno_certificate_app_tokens($type, $tokens, array $data = array(), array $options = array()) {
  $replacements = array();
  if ($type == 'node' && !empty($data['node'])) {
    $node = $data['node'];
    foreach ($tokens as $name => $original) {
      switch ($name) {
        case 'certificate_granted_node':
          $replacements[$original] = opigno_certificate_app_token_approved_date($node->nid, $data['user']->uid);
          break;
        case 'list_of_courses':
          $replacements[$original] = opigno_certificate_app_token_list_of_courses($node);
          break;
      }
    }
  }
  return $replacements;
}
function opigno_certificate_app_token_list_of_courses($node) {
  if (isset($node->opigno_class_courses[LANGUAGE_NONE])) {
    $courselist = "";
    foreach ($node->opigno_class_courses[LANGUAGE_NONE] as $courses) {
      $course = node_load($courses['target_id']);
      $courselist .= $course->title . ", ";
    }
    $courselist = substr($courselist, 0, -2);
    $courselist .= ".";
    return $courselist;
  }
  return "";
}
function opigno_certificate_app_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == "certificate_node_form") {
    $form['options']['status']['#default_value'] = 0;
  }
  if (isset($form['certificate']['map']['manual']['manual'])) {
    if (empty($form['certificate']['map']['manual']['manual']['#default_value'])) {
      $form['certificate']['map']['manual']['manual']['#default_value'] = '-1';
    }
  }
}
function opigno_certificate_app_token_approved_date($nodeid, $userid) {
  $node = node_load($nodeid);
  $time_last = 0;
  $i = 0;
  if (isset($node->opigno_class_courses[LANGUAGE_NONE])) {
    foreach ($node->opigno_class_courses[LANGUAGE_NONE] as $course) {
      $courses[$i] = node_load($course['target_id']);
      $i++;
    }
  }
  else {
    $courses[0] = $node;
  }
  foreach ($courses as $acourse) {
    if (isset($acourse->course_required_quiz_ref[LANGUAGE_NONE])) {
      $quizes = opigno_quiz_app_get_all_required_quizzes($acourse);
      $scoresall = opigno_quiz_app_get_score_data(array_keys($quizes), $userid, FALSE);
      foreach ($scoresall as $quiz_id => $scores) {
        foreach ($scores as $scoreid => $score) {
          if ($score->time_end != 0) {
            if ($score->time_end > $time_last) {
              $time_last = $score->time_end;
            }
          }
        }
      }
    }
  }
  return gmdate("d/M/Y", $time_last);
}