問題描述
由於某些原因,不能讓使用者進行註冊,只能有運營人員手動新增使用者,單個新增使用者比較麻煩,因此選擇使用上傳檔案的形式來批量生成使用者,但是上傳使用者在不給定 password 欄位時,應該生成密碼並通知使用者,但是最終結果是生成使用者成功了,郵件並沒有發出(郵件伺服器已正確配置,除了上傳使用者無法傳送郵件外,其它新增使用者或者忘記密碼等操作都可以傳送郵件),進過近一個星期對 moodle 原始碼的研究,終於找到 問題所在並解決,特此記錄,望接下來遇到此問題的夥伴能儘快解決此問題!
Moodle簡介
Moodle(Modular Object-Oriented Dynamic Learning Environment)是一個用於製作網路課程或網站的軟體包。它是一個全球性的開發專案,用以支援社會建構主義(social constructionist)的教育框架。Moodle是一個自由的開源軟體 (在GNU 公共許可協議下),也就是說Moodle是有版權的,但是你有額外的自由。你可以自由地複製、使用或者修改Moodle,前提條件是你同意:為他人提供程式碼,沒有修改或刪除原有的版權和許可,以及將相似的版權應用於衍生的作品。
當前工作環境
- 伺服器:阿里雲Linux伺服器 Apache
- moodle版本: MOODLE_33_STABLE
- 其它moodle所需環境包括
PHP
、MySQL
等和moodle官網安裝推薦一致,伺服器路徑也一致
解決辦法
-
鎖定問題檔案
- 找到
moodle
目錄下admin/tool/uploaduser/index.php
- 該檔案便是上傳使用者時所有操作流程的檔案
- 找到
-
鎖定問題所在位置
-
滾動到
831行
左右,找到如下程式碼:if ($user->password === `to be generated`) { set_user_preference(`create_password`, 1, $user); }
-
-
解決問題
-
將以上程式碼替換成如下程式碼:
if ($user->password === `to be generated`) { setnew_password_and_mail($user); unset_user_preference(`create_password`, $user); set_user_preference(`auth_forcepasswordchange`, 1, $user); }
- 程式碼釋義:之前的程式碼是隻生成了密碼,但是並未執行傳送賬號密碼郵件給使用者,因此替換後的程式碼會先執行
傳送賬號密碼郵件
,在清除已設定的密碼
,最後設定使用者登入時強制修改密碼
。
-
問題總結
目前在本地和線上測試上傳單個或多個使用者都能正常傳送郵件,目的算是達到了!
解決此問題花費了不少時間,也怪筆者對 PHP 只能算是個半吊子,還未正式開發過 PHP 專案
因此走了不少彎路,但是最後問題得到解決,甚感欣慰!
*
友情提示: 更改線上環境或測試環境程式碼後,記得重啟伺服器,例如當前環境就執行:service apache2 restart