function confirmation(name) { if (confirm("'.get_lang('AreYouSureToDelete').' " + name + " ?")) {return true;} else {return false;} } '; if (!empty ($_GET['coursePath'])) { $course_url = api_get_path(WEB_COURSE_PATH).$_GET['coursePath'].'/index.php'; $interbreadcrumb[] = array ('url' => $course_url, 'name' => $_GET['courseCode']); } /* ----------------------------------------------------------- Configuration file ----------------------------------------------------------- */ require_once (api_get_path(CONFIGURATION_PATH).'profile.conf.inc.php'); /* ----------------------------------------------------------- Libraries ----------------------------------------------------------- */ include_once (api_get_path(LIBRARY_PATH).'fileManage.lib.php'); include_once (api_get_path(LIBRARY_PATH).'fileUpload.lib.php'); if (is_profile_editable()) $tool_name = get_lang('ModifProfile'); else $tool_name = get_lang('ViewProfile'); $table_user = Database :: get_main_table(MAIN_USER_TABLE); /* ----------------------------------------------------------- Form ----------------------------------------------------------- */ /* * Get initial values for all fields. */ $sql = "SELECT * FROM $table_user WHERE user_id = '$_uid'"; $result = api_sql_query($sql, __FILE__, __LINE__); if ($result) { $user_data = mysql_fetch_array($result, MYSQL_ASSOC); if (is_null($user_data['language'])) $user_data['language'] = api_get_setting('platformLanguage'); } /* * Initialize the form. */ $form = new FormValidator('profile', 'post', "{$_SERVER['PHP_SELF']}?{$_SERVER['QUERY_STRING']}", null, array('style' => 'width: 60%; float: '.($text_dir=='rtl'?'right;':'left;'))); /* Make sure this is the first submit on the form, even though it is hidden! * Otherwise, if a user has productions and presses ENTER to submit, he will * attempt to delete the first production in the list. */ if (is_profile_editable()) $form->addElement('submit', null, get_lang('Ok'), array('style' => 'visibility:hidden;')); // LAST NAME and FIRST NAME $form->addElement('text', 'lastname', get_lang('Lastname'), array('size' => 40)); $form->addElement('text', 'firstname', get_lang('Firstname'), array('size' => 40)); if (api_get_setting('profile', 'name') !== 'true') $form->freeze(array('lastname', 'firstname')); $form->applyFilter(array('lastname', 'firstname'), 'stripslashes'); $form->applyFilter(array('lastname', 'firstname'), 'trim'); $form->addRule('lastname' , get_lang('ThisFieldIsRequired'), 'required'); $form->addRule('firstname', get_lang('ThisFieldIsRequired'), 'required'); // OFFICIAL CODE if (CONFVAL_ASK_FOR_OFFICIAL_CODE) { $form->addElement('text', 'official_code', get_lang('OfficialCode'), array('size' => 40)); if (api_get_setting('profile', 'officialcode') !== 'true') $form->freeze('official_code'); $form->applyFilter('official_code', 'stripslashes'); $form->applyFilter('official_code', 'trim'); if (api_get_setting('registration', 'officialcode') == 'true') $form->addRule('official_code', get_lang('ThisFieldIsRequired'), 'required'); } // EMAIL $form->addElement('text', 'email', get_lang('Email'), array('size' => 40)); if (api_get_setting('profile', 'email') !== 'true') $form->freeze('email'); $form->applyFilter('email', 'stripslashes'); $form->applyFilter('email', 'trim'); if (api_get_setting('registration', 'email') == 'true') $form->addRule('email', get_lang('ThisFieldIsRequired'), 'required'); $form->addRule('email', get_lang('EmailWrong'), 'email'); // PHONE $form->addElement('text', 'phone', get_lang('phone'), array('size' => 20)); if (api_get_setting('profile', 'phone') !== 'true') $form->freeze('phone'); $form->applyFilter('phone', 'stripslashes'); $form->applyFilter('phone', 'trim'); /*if (api_get_setting('registration', 'phone') == 'true') $form->addRule('phone', get_lang('ThisFieldIsRequired'), 'required'); $form->addRule('phone', get_lang('EmailWrong'), 'email');*/ // PICTURE if (is_profile_editable() && api_get_setting('profile', 'picture') == 'true') { $form->addElement('file', 'picture', (get_user_image($_uid) != '' ? get_lang('UpdateImage') : get_lang('AddImage'))); $form->add_progress_bar(); if( strlen($user_data['picture_uri']) > 0) { $form->addElement('checkbox', 'remove_picture', null, get_lang('DelImage')); } $form->addRule('picture', get_lang('OnlyImagesAllowed'), 'mimetype', array('image/gif', 'image/jpeg', 'image/png')); } // USERNAME $form->addElement('text', 'username', get_lang('Username'), array('size' => 40)); if (api_get_setting('profile', 'login') !== 'true') $form->freeze('username'); $form->applyFilter('username', 'stripslashes'); $form->applyFilter('username', 'trim'); $form->addRule('username', get_lang('ThisFieldIsRequired'), 'required'); $form->addRule('username', get_lang('UsernameWrong'), 'username'); $form->addRule('username', get_lang('UserTaken'), 'username_available', $user_data['username']); // LANGUAGE $form->addElement('select_language', 'language', get_lang('Language')); if (api_get_setting('profile', 'language') !== 'true') $form->freeze('language'); // EXTENDED PROFILE if (api_get_setting('extended_profile') == 'true') { $form->addElement('static', null, ''.get_lang('OptionalTextFields').''); // MY COMPETENCES $form->addElement('textarea', 'competences', get_lang('MyCompetences'), array('cols' => 30, 'rows' => 2)); // MY DIPLOMAS $form->addElement('textarea', 'diplomas', get_lang('MyDiplomas'), array('cols' => 30, 'rows' => 2)); // WHAT I AM ABLE TO TEACH $form->addElement('textarea', 'teach', get_lang('MyTeach'), array('cols' => 30, 'rows' => 2)); // MY PRODUCTIONS $form->addElement('file', 'production', get_lang('MyProductions')); if ($production_list = build_production_list($_uid)) $form->addElement('static', 'productions', null, $production_list); // MY PERSONAL OPEN AREA $form->add_html_editor('openarea', get_lang('MyPersonalOpenArea'), false); $form->applyFilter(array('competences', 'diplomas', 'teach', 'openarea'), 'stripslashes'); $form->applyFilter(array('competences', 'diplomas', 'teach'), 'trim'); // openarea is untrimmed for maximum openness } // PASSWORD if (is_profile_editable() && api_get_setting('profile', 'password') == 'true') { $form->addElement('static', null, null, ''.get_lang('Enter2passToChange').''); $form->addElement('password', 'password1', get_lang('Pass'), array('size' => 40)); $form->addElement('password', 'password2', get_lang('Confirmation'), array('size' => 40)); // user must enter identical password twice so we can prevent some user errors $form->addRule(array('password1', 'password2'), get_lang('PassTwo'), 'compare'); if (CHECK_PASS_EASY_TO_FIND) $form->addRule('password1', get_lang('PassTooEasy').': '.api_generate_password(), 'callback', 'api_check_password'); } // SUBMIT if (is_profile_editable()) { $form->addElement('submit', 'apply_change', get_lang('Ok')); } else { $form->freeze(); } /* * Set initial values for all fields. */ $form->setDefaults($user_data); /* ============================================================================== FUNCTIONS ============================================================================== */ /* ----------------------------------------------------------- LOGIC FUNCTIONS ----------------------------------------------------------- */ /** * Can a user edit his/her profile? * * @return boolean Editability of the profile */ function is_profile_editable() { return $GLOBALS['profileIsEditable']; } /* ----------------------------------------------------------- USER IMAGE FUNCTIONS ----------------------------------------------------------- */ /** * Get a user's display picture. If the user doesn't have a picture, this * function will return an empty string. * * @param $_uid User id * @return The uri to the picture */ function get_user_image($_uid) { $table_user = Database :: get_main_table(MAIN_USER_TABLE); $sql = "SELECT picture_uri FROM $table_user WHERE user_id = '$_uid'"; $result = api_sql_query($sql, __FILE__, __LINE__); if ($result && $row = mysql_fetch_array($result, MYSQL_ASSOC)) $image = trim($row['picture_uri']); else $image = ''; return $image; } /** * Upload a submitted user image. * * @param $_uid User id * @return The filename of the new picture or FALSE if the upload has failed */ function upload_user_image($_uid) { /* Originally added by Miguel (miguel@cesga.es) - 2003-11-04 * Code Refactoring by Hugues Peeters (hugues.peeters@claroline.net) - 2003-11-24 * Moved inside a function and refactored by Thomas Corthals - 2005-11-04 */ $image_repository = api_get_path(SYS_CODE_PATH).'upload/users/'; $existing_image = get_user_image($_uid); $file_extension = explode('.', $_FILES['picture']['name']); $file_extension = strtolower($file_extension[sizeof($file_extension) - 1]); if (!file_exists($image_repository)) mkpath($image_repository); if ($existing_image != '') { if (KEEP_THE_NAME_WHEN_CHANGE_IMAGE) { $picture_filename = $existing_image; $old_picture_filename = 'saved_'.date('Y_m_d_H_i_s').'_'.uniqid('').'_'.$existing_image; } else { $old_picture_filename = $existing_image; $picture_filename = (PREFIX_IMAGE_FILENAME_WITH_UID ? 'u'.$_uid.'_' : '').uniqid('').'.'.$file_extension; } if (KEEP_THE_OLD_IMAGE_AFTER_CHANGE) rename($image_repository.$existing_image, $image_repository.$old_picture_filename); else unlink($image_repository.$existing_image); } else { $picture_filename = (PREFIX_IMAGE_FILENAME_WITH_UID ? $_uid.'_' : '').uniqid('').'.'.$file_extension; } if (move_uploaded_file($_FILES['picture']['tmp_name'], $image_repository.$picture_filename)) return $picture_filename; return false; // this should be returned if anything went wrong with the upload } /** * Remove an existing user image. * * @param $_uid User id */ function remove_user_image($_uid) { $image_repository = api_get_path(SYS_CODE_PATH).'upload/users/'; $image = get_user_image($_uid); if ($image != '') { if (KEEP_THE_OLD_IMAGE_AFTER_CHANGE) rename($image_repository.$image, $image_repository.'deleted_'.date('Y_m_d_H_i_s').'_'.$image); else unlink($image_repository.$image); } } /* ----------------------------------------------------------- PRODUCTIONS FUNCTIONS ----------------------------------------------------------- */ /** * Returns an XHTML formatted list of productions for a user, or FALSE if he * doesn't have any. * * If there has been a request to remove a production, the function will return * without building the list unless forced to do so by the optional second * parameter. This increases performance by avoiding to read through the * productions on the filesystem before the removal request has been carried * out because they'll have to be re-read afterwards anyway. * * @param $_uid User id * @param $force Optional parameter to force building after a removal request * @return A string containing the XHTML code to dipslay the production list, or FALSE */ function build_production_list($_uid, $force = false) { if (!$force && $_POST['remove_production']) return true; // postpone reading from the filesystem $productions = get_user_productions($_uid); if (empty($productions)) return false; $production_dir = api_get_path(WEB_CODE_PATH)."upload/users/$_uid/"; $del_image = api_get_path(WEB_CODE_PATH).'img/delete.gif'; $del_text = get_lang('Delete'); $production_list = '