/**
  * adds a test-type node to database
  *
  * @access public
  *
  * @param $data - an associative array containing all the node's data
  *
  * @return an error if something goes wrong or true
  *
  */
 public function test_addNode($data)
 {
     $db =& $this->getConnection();
     if (self::isError($db)) {
         return $db;
     }
     //validazione campi
     $d = array('id_corso', 'id_posizione', 'id_utente', 'id_istanza', 'nome', 'titolo', 'consegna', 'testo', 'tipo', 'data_creazione', 'ordine', 'id_nodo_parent', 'id_nodo_radice', 'id_nodo_riferimento', 'livello', 'versione', 'n_contatti', 'icona', 'colore_didascalia', 'colore_sfondo', 'correttezza', 'copyright', 'didascalia', 'durata', 'titolo_dragdrop');
     foreach ($data as $k => $v) {
         if (!in_array($k, $d)) {
             unset($data[$k]);
         }
     }
     $data['data_creazione'] = time();
     //fine validazione campi
     $keys = array_keys($data);
     $array_values = array_values($data);
     $placeholders = array_fill(0, count($data), '?');
     $sql = "INSERT INTO `" . self::$PREFIX . "nodes` (" . implode(',', $keys) . ") VALUES (" . implode(",", $placeholders) . ")";
     ADALogger::log_db("trying inserting the test node: " . $sql);
     $res = $this->queryPrepared($sql, $array_values);
     // if an error is detected, an error is created and reported
     if (self::isError($res)) {
         return new AMA_Error($this->errorMessage(AMA_ERR_ADD) . " while in test_addNode." . AMA_SEP . ": " . $res->getMessage());
     }
     return $db->lastInsertID();
 }
Beispiel #2
0
 /**
  * Remove a tutor from the DB
  *
  * @access public
  *
  * @param $id the unique id of the tutor
  *
  * @return an AMA_Error object if something goes wrong, true on success
  *
  */
 public function remove_tutor($id)
 {
     $db =& $this->getConnection();
     if (AMA_DB::isError($db)) {
         return $db;
     }
     $sql = "delete from tutor where id_utente_tutor={$id}";
     ADALogger::log_db($sql);
     $res = $this->executeCritical($sql);
     if (AMA_DB::isError($res)) {
         // $res is ana AMA_Error object
         return $res;
     }
     $sql = "delete from utente where id_utente={$id}";
     $res = $this->executeCritical($sql);
     if (AMA_DB::isError($res)) {
         // $res is ana AMA_Error object
         return $res;
     }
     return true;
 }
/**
 *
 * @return unknown_type
 */
function session_controlFN($neededObjAr = array(), $allowedUsersAr = array(), $trackPageToNavigationHistory = true)
{
    //ADALogger::log('session control FN');
    if (!session_start()) {
        /*
         * As of PHP 5.3.0 if session fails to star for some reason,
         * FALSE is returned.
         */
        ADALogger::log('session failed to start');
    }
    /**
     * giorgio 11/ago/2013
     * if it's not multiprovider and we're asking for index page,
     * sets the selected provider by detecting it from the filename that's executing
     */
    if (!MULTIPROVIDER) {
        list($client) = explode('.', preg_replace('/(http[s]?:\\/\\/)/', '', $_SERVER['SERVER_NAME']));
        if (isset($client) && !empty($client) && is_dir(ROOT_DIR . '/clients/' . $client)) {
            // $_SESSION['sess_user_provider'] = $client;
            $GLOBALS['user_provider'] = $client;
            // other session vars per provider may go here...
        } else {
            unset($GLOBALS['user_provider']);
        }
        //   	if (isset($_SESSION['sess_user_provider']) && !empty($_SESSION['sess_user_provider']))
        //   		$GLOBALS['user_provider'] = $_SESSION['sess_user_provider'];
        // if it's not set and its value is not equal to the new passed one, set a cookie that shall expire in one year
        //   	if (isset($GLOBALS['user_provider']) && $_COOKIE['ada_provider']!=$GLOBALS['ada_provider'])
        //   		setcookie('ada_provider',$GLOBALS['user_provider'],+time()+ 86400 *365 ,'/');
    }
    // end if !MULTIPROVIDER
    /*
     * Navigation history
     */
    require_once ROOT_DIR . '/include/navigation_history.inc.php';
    $debug_backtrace = debug_backtrace();
    $level = sizeof($debug_backtrace) - 1;
    /**
     * giorgio 06/set/2013
     * detect mobile device feature
     */
    if (!isset($_SESSION['mobile-detect'])) {
        $_SESSION['mobile-detect'] = new Mobile_Detect();
    }
    /**
     * @author giorgio 10/nov/2014
     * 
     * sets the IE-version session variable to a float holding
     * the IE version or false if non-IE or IE version >= 11.0
     */
    if (isset($_SESSION['mobile-detect']) && !isset($_SESSION['IE-version'])) {
        $isIE = $_SESSION['mobile-detect']->version('IE');
        if ($isIE !== false && is_numeric($isIE)) {
            $_SESSION['IE-version'] = floatval($isIE);
        } else {
            $_SESSION['IE-version'] = false;
        }
    }
    if ($trackPageToNavigationHistory) {
        $caller_file = $debug_backtrace[$level]['file'];
        if (!isset($_SESSION['sess_navigation_history'])) {
            $navigation_history = new NavigationHistory(NAVIGATION_HISTORY_SIZE);
            $navigation_history->addItem($caller_file);
            $_SESSION['sess_navigation_history'] = $navigation_history;
        } else {
            $navigation_history = $_SESSION['sess_navigation_history'];
            $navigation_history->addItem($caller_file);
            $_SESSION['sess_navigation_history'] = $navigation_history;
        }
    }
    $GLOBALS['sess_id'] = session_id();
    $parm_errorHa = parameter_controlFN($neededObjAr, $allowedUsersAr);
    //var_dump($parm_errorHa);
    if ($parm_errorHa['session']) {
    }
    if ($parm_errorHa['user']) {
        // FIXME: passare messaggio di errore
        $errObj = new ADA_Error(NULL, NULL, NULL, ADA_ERROR_ID_USER_REQUIRED_BUT_NOT_FOUND, ADA_ERROR_SEVERITY_FATAL, 'index.php');
    }
    /*
     * URL a cui redirezionare l'utente in caso di errore su corso, istanza_corso, nodo
     */
    $sess_userObj = $_SESSION['sess_userObj'];
    if ($sess_userObj instanceof ADAGenericUser) {
        $redirectTo = $sess_userObj->getHomePage();
    } else {
        $redirectTo = 'index.php';
    }
    if ($parm_errorHa['course']) {
        /**
         * If parameter_controlFN has put an array in the 'course' key
         * this means that the user is asking for a node that belongs to
         * a course for which the user is subscribed to more than one instance.
         * 
         *  The list of the insance id is passed in the 'course key as an
         *  array and must be passed to the browsing/select_instance script
         *  that is responsible for asking the user to select an instance. 
         */
        if (is_array($parm_errorHa['course'])) {
            $errObj = new ADA_Error(NULL, NULL, NULL, ADA_ERROR_ID_CINST_REQUIRED_BUT_NOT_FOUND, ADA_ERROR_SEVERITY_FATAL, 'browsing/select_instance.php?node=' . $parm_errorHa['node'] . '&instances=' . urlencode(implode(',', $parm_errorHa['course'])));
        } else {
            // FIXME: passare messaggio di errore
            $errObj = new ADA_Error(NULL, NULL, NULL, ADA_ERROR_ID_SERVICE_REQUIRED_BUT_NOT_FOUND, ADA_ERROR_SEVERITY_FATAL, $redirectTo);
        }
    }
    if ($parm_errorHa['course_instance']) {
        // FIXME: passare messaggio di errore
        // TODO: forse il controllo su ADAGuest in questo if puo' essere rimosso,
        // dato che non settiamo $parm_errorHa['coutrse_instance'] nel caso in cui
        // l'utente e' sul tester pubblico (ADAGuest e' solo sul tester pubblico)
        if (!$sess_userObj instanceof ADAAuthor && !$sess_userObj instanceof ADAGuest) {
            $errObj = new ADA_Error(NULL, NULL, NULL, ADA_ERROR_ID_CINST_REQUIRED_BUT_NOT_FOUND, ADA_ERROR_SEVERITY_FATAL, $redirectTo);
        }
    }
    if ($parm_errorHa['node']) {
        // FIXME: passare messaggio di errore
        $errObj = new ADA_Error(NULL, NULL, NULL, ADA_ERROR_ID_NODE_REQUIRED_BUT_NOT_FOUND, ADA_ERROR_SEVERITY_FATAL, $redirectTo);
    }
    if ($parm_errorHa['guest_user_not_allowed']) {
        // FIXME: passare messaggio di errore
        $errObj = new ADA_Error(NULL, NULL, NULL, ADA_ERROR_ID_CINST_NOT_PUBLIC, ADA_ERROR_SEVERITY_FATAL, $redirectTo);
    }
    // FIXME: controllare su livello utente?
    //  if($parm_errorHa['user_level']) {
    //  }
    $GLOBALS['sess_id_user'] = isset($_SESSION['sess_id_user']) ? $_SESSION['sess_id_user'] : null;
    $GLOBALS['sess_id_user_type'] = isset($_SESSION['sess_id_user_type']) ? $_SESSION['sess_id_user_type'] : null;
    $GLOBALS['sess_user_level'] = isset($_SESSION['sess_user_level']) ? $_SESSION['sess_user_level'] : null;
    $GLOBALS['sess_id_course'] = isset($_SESSION['sess_id_course']) ? $_SESSION['sess_id_course'] : null;
    $GLOBALS['sess_id_course_instance'] = isset($_SESSION['sess_id_course_instance']) ? $_SESSION['sess_id_course_instance'] : null;
    $GLOBALS['sess_id_node'] = isset($_SESSION['sess_id_node']) ? $_SESSION['sess_id_node'] : null;
    $GLOBALS['sess_selected_tester'] = isset($_SESSION['sess_selected_tester']) ? $_SESSION['sess_selected_tester'] : null;
    $GLOBALS['sess_user_language'] = isset($_SESSION['sess_user_language']) ? $_SESSION['sess_user_language'] : null;
}
Beispiel #4
0
 /**
  * get all services
  * @param  $field_list_ar array
  * @param  $clause string
  * @return $servicesAr array
  */
 public static function find_services_list($field_list_ar, $clause, $for_registration = FALSE, $max_level = 4, $min_level = 1)
 {
     /*NOTE: old version was restricted to user's tester and required $userObj as parameter:
     
         static public function find_services_list(ADAGenericUser $userObj,$field_list_ar,$clause) {
     
         Also, it got $user_id from it:
     
         $user_id = $userObj->getId();
         */
     /*
     *  if ($userObj){ etc
     $user_id = $userObj->getId();
     )
     */
     $to_sub_course_dataHa = array();
     $course_instances = array();
     $common_dh = $GLOBALS['common_dh'];
     $testers_list = $common_dh->get_all_testers();
     /*
      * Obtain services data from testers
      */
     foreach ($testers_list as $testerAr) {
         //$tester = $testerAr[0];
         $tester = $testerAr['puntatore'];
         ADALogger::log("MultiPort::find_services_list for tester: {$tester}");
         $tester_dsn = self::getDSN($tester);
         //if(($tester_dsn != null) && ($tester!=ADA_PUBLIC_TESTER)) {
         if ($tester_dsn != null) {
             // FIXME: deve escludere i PUBLIC o, no?
             //        $tester_dataHa = $common_dh->get_tester_info_from_pointer($tester);
             if (AMA_DataHandler::isError($tester_dataHa)) {
                 // FIXME: rimuovere e gestire con ADA_Error
             }
             //        $tester_name = $tester_dataHa[1];
             $tester_dh = AMA_DataHandler::instance($tester_dsn);
             // FIXME:  questa versione prende le implementazioni dei servizi, non i servizi !!!!!
             $all_instance = $tester_dh->find_courses_list($field_list_ar, $clause);
             if (AMA_DataHandler::isError($all_instance)) {
                 // FIXME: rimuovere e gestire con ADA_Error
             }
             if (is_array($all_instance)) {
                 foreach ($all_instance as $one_instance) {
                     $id_course = $one_instance[0];
                     $course_instances[$id_course] = $one_instance;
                 }
             }
         }
     }
     // foreach tester
     /*
      * Obtain services level from common db
      */
     $services_info = array();
     foreach ($course_instances as $id_course => $course_data) {
         $service_info = $common_dh->get_service_info_from_course($id_course);
         $tester_info = $common_dh->get_tester_info_from_id_course($id_course);
         // FIXME
         /*
          * Se non siamo riusciti ad ottenere informazioni sul servizio o sul tester
          * a partire da un corso, possiamo assumere che questo servizio non venga erogato
          * e quindi non lo mostriamo tra quelli a cui l'utente puo' fare richiesta
          * di iscrizione.
          */
         if ($service_info == NULL || AMA_Common_DataHandler::isError($tester_info)) {
             continue;
         }
         $tester_name = $tester_info['nome'];
         $titolo = $course_data[2];
         $servizio = $service_info[1];
         $descrizione = $course_data[5];
         if (AMA_DataHandler::isError($service_info)) {
             // echo 'get service info from course <br />';
             continue;
         } else {
             $livello = $service_info[3];
             if ($livello <= $max_level and $livello >= $min_level) {
                 if ($livello > 1) {
                     if ($for_registration) {
                         if ($id_course == $_REQUEST['id_course']) {
                             $require_link = "<input type=\"radio\" name=\"id_course\" value={$id_course} checked=\"checked\"'>";
                         } else {
                             $require_link = "<input type=\"radio\" name=\"id_course\" value={$id_course}>";
                         }
                     } else {
                         $require_link = "<a href=" . HTTP_ROOT_DIR . "/browsing/registration.php?id_course={$id_course}>" . translateFN('Richiedi') . "</a>";
                     }
                     // we want subscribe only to services with level>1
                     $info_link = "<a href=" . HTTP_ROOT_DIR . "/info.php?id_course={$id_course}>" . translateFN('Info') . "</a>";
                     $img_link = "<img src=\"img/title.png\" border=0> " . translateFN('Servizio');
                     $row = array(translateFN('Provider') => $tester_name, translateFN('Servizio') => $servizio, translateFN('Livello') => $livello, translateFN('Info') => $info_link, translateFN('Richiedi') => $require_link);
                     array_push($to_sub_course_dataHa, $row);
                 } else {
                     // public access service, level = 1
                     $id_node = $id_course . '_' . ADA_DEFAULT_NODE;
                     $require_link = '<a href="' . HTTP_ROOT_DIR . '/browsing/view.php?id_course=' . $id_course . '&id_node=' . $id_node . '">' . translateFN('Entra') . '</a>';
                     $info_link = "<a href=" . HTTP_ROOT_DIR . "/info.php?id_course={$id_course}>" . translateFN('Info') . "</a>";
                     $img_link = "<img src=\"img/title.png\" border=0> " . translateFN('Servizio');
                     $row = array(translateFN('Provider') => $tester_name, translateFN('Servizio') => $servizio, translateFN('Livello') => $livello, translateFN('Info') => $info_link, translateFN('Richiedi') => $require_link);
                     array_push($to_sub_course_dataHa, $row);
                 }
             }
         }
     }
     // sorting on:
     // provider, then service, then level
     foreach ($to_sub_course_dataHa as $key => $row) {
         $provider[$key] = $row[translateFN('Provider')];
         $servizio[$key] = $row[translateFN('Servizio')];
         $livello[$key] = $row[translateFN('Livello')];
     }
     array_multisort($provider, SORT_DESC, $livello, SORT_DESC, $servizio, SORT_DESC, $to_sub_course_dataHa);
     return $to_sub_course_dataHa;
 }
Beispiel #5
0
 /**
  * Handle this error
  *
  * @return void
  */
 public function handleError()
 {
     $action = $this->getAction();
     /**
      * Non chiamare translateFN sul messaggio di errore.
      */
     /**
      * Error logging
      */
     if ($action & ADA_ERROR_LOG_TO_FILE) {
         ADALogger::log('ADA ERROR LOG TO FILE');
         ADAFileLogger::log_error($this->asTextToLogInFile());
     }
     if ($action & ADA_ERROR_LOG_TO_HTML_COMMENT) {
         ADALogger::log('ADA ERROR LOG TO HTML COMMENT');
     }
     if ($action & ADA_ERROR_LOG_TO_HTML) {
         ADAScreenLogger::log_error($this->asTextToLogInHTML());
     }
     if ($action & ADA_ERROR_LOG_TO_EMAIL) {
         ADALogger::log('ADA ERROR LOG TO EMAIL');
         // TODO: log via email
         /*
          * Richiamare classe mailer per il log, passando come contenuto
          * $this->asTextToLogInFile()
          */
     }
     if ($action & ADA_ERROR_LOG_TO_DB) {
         ADALogger::log('ADA ERROR LOG TO DB');
         // TODO: log su database
         /*
          * Richiamare classe MultiPort per il log su tabella DB passando
          * come argomento $this->asArrayToLogInDB()
          */
     }
     /**
      * Redirect user
      */
     if (is_null($this->redirectTo)) {
         if ($action & ADA_ERROR_REDIRECT_TO_LOGIN) {
             // FIXME: login location == index?
             header('Location:' . HTTP_ROOT_DIR);
             exit;
         }
         if ($action & ADA_ERROR_REDIRECT_TO_HOMEPAGE) {
             $sess_userObj = $_SESSION['sess_userObj'];
             if ($sess_userObj instanceof ADALoggableUser) {
                 header('Location:' . $sess_userObj->getHomePage());
                 exit;
             } else {
                 header('Location:' . HTTP_ROOT_DIR);
                 exit;
             }
         }
         if ($action & ADA_ERROR_REDIRECT_TO_ERROR_PAGE) {
             header('Location:' . HTTP_ROOT_DIR . '/error.php');
             exit;
         }
     } else {
         /*
          * Controlliamo se il programmatore ha specificato un indirizzo commpleto
          * contenente HTTP_ROOT_DIR, altrimenti lo appende.
          */
         if (strncmp(HTTP_ROOT_DIR, $this->redirectTo, sizeof(HTTP_ROOT_DIR)) == 0) {
             header('Location: ' . $this->redirectTo);
             exit;
         }
         header('Location:' . HTTP_ROOT_DIR . '/' . $this->redirectTo);
         exit;
     }
 }
 /**
  * Method for handling thrown exceptions all in the same way.
  * For time being, simply logs the exception and returns it.
  *
  * @author giorgio 31/mag/2013
  *
  * @param  PDOException $e the PDOException to be handled
  * @return PDOException the passed PDOException
  *
  * @access private
  */
 private static function handleException(PDOException $e)
 {
     /**
      * Probably log the error somewhere and return it in the connection_object itself
      */
     ADALogger::log_db("[PDOException] : " . $e->getFile() . ":" . $e->getLine() . " - " . $e->getMessage());
     return $e;
 }