g) Tổng quan quyển luận văn
2.3.4 Điều chỉnh giai đoạn nộp bài
Đếm từ
Khi tác giả gõ nội dung vào phần textarea thì javascript(js) sẽ bắt đầu đếm số từ để tác giả biết số lƣợng từ có hợp lệ hay không. Tuy nhiên,
phần đếm từ để kiểm tra số từ ngƣời dùng nhập vào ở mã nguồn hệ thống của Myreview không thể đếm chính xác văn bản tiếng Việt.
Xét tập tin js, ghép số thứ tự từng phần trong cấu trúc tóm tắt vào thành một chuỗi để nó xác định đƣợc id chính xác của từng textarea (tiêu đề không đếm số từ), xác định xong thì nó sẽ tách chữ bởi „ ‟, sau đó đếm từ. Tuy nhiên, để phù hợp với yêu cầu đa ngôn ngữ có thể thay đổi phần hiển thị đếm từ đúng với ngôn ngữ mà ngừoi dùng chọn.
Trong đó, {list_abstract_ids} là biến chứa chuỗi id của các đoạn textarea, cách nhau bởi dấu “;”.
Khi nhập vào textarea thì hàm sumWords() đƣợc gọi, có kèm tham số là chuỗi {zmax.word}, đƣợc lấy từ CSDL dựa theo ngôn ngữ, nếu nhƣ lúc này ngƣời dùng chọn ngôn ngữ tiếng việt thì „{zmax.word}‟= „từ‟. Ở đây, để hổ trợ tiếng có số ít, số nhiều, thêm tham số {zmax.words}.
Hai hàm này, Myreview đã thực hiện code rất tốt, tuy nhiên nó vẫn chƣa linh hoạt với ngôn ngữ. Do đó, phần này, em có thêm phần điều kiện để hiển thị đúng với ý nghĩa của từ ngữ trong các ngôn ngữ. Đã kiểm tra và thích hợp với tiếng Anh và tiếng Việt, nếu ở một ngôn ngữ khác mà số ít và số nhiều có hai từ khác nhau thì có thể thêm phần dịch vào CSDL, phần này sẽ đƣợc nói ở phần hỗ trợ đa ngôn ngữ sau.
Với phần kiểm tra khi đã hoàn chỉnh việc cung cấp thông tin của một bài báo, AuthorController (là controller dùng cho module tác giả) sẽ kiểm tra đã bắt lỗi. Myreview bắt lỗi các phần không nhập đúng nên có thể bỏ qua, tuy nhiên với đếm từ thì Myreview lại gặp trục trặc trong vấn đề ngôn ngữ. Khi viết tiếng Việt có dấu, thì từ kiểm tra đếm nhiều so với số lƣợng từ thực tế.
Hàm str_word_count của php hỗ trợ đếm từ của chuỗi mà không cần xử lý gì khác. Tuy nhiên, khi chuỗi chứa từ có dấu thì nó biết sai với yêu cầu. Nên dùng cách khác để đếm đúng các trƣờng hợp.
Biến $abContent là biến chứa chuỗi nội dung của một phần abstract. Sau đó, tách chuỗi ra dựa vào dấu phân cách („ ‟) thành mảng, dùng hàm count để đếm số phần tử trong chuỗi.
Chỉnh sửa nội dung mail sau cho, đầy đủ thông tin cần thiết cho tác giả lần đầu sử dụng nộp bài báo hội thảo trực tiếp.
Đây là mẫu mail trong CSDL theo ngôn ngữ tiếng Việt, khi xác nhận mã mail và mã ngôn ngữ, thì hệ thống tự động vào CSDL lấy mail ra, trƣớc đó thì hệ thống không có hỗ trợ nội dung này. Với nội dung này, tác giả có thể biết đƣợc mình đã cung cấp thông tin đúng chƣa? Cần vào đâu để xem lại chi tiết, cả hạn chót nộp bài vào lúc nào cũng đƣợc liệt kê ở trên. Để có thể lấy dữ liệu ra đúng với mã số bài báo từ một đoạn code trong {} (việc lấy từ đâu đƣợc nói trong phần xây dựng thƣ viên View ở trên), thì cần phải thêm:
$paperRow là một đối tƣợng của bảng Paper, hàm putInView() của biến này sẽ thiết lập nội dung sẽ hiển thị ra tƣơng ứng trong các đoạn code trong {}. Tƣơng tự với $this→config là đối tƣợng của bảng Config, biến này dùng xuất ra hạn chót của bài nộp.
Tuy nhiên phần này bị giới hạn ngƣời sửa đổi, vì ngƣời có thể sửa đổi nội dung này chỉ có thể là ngƣời quản trị toàn bộ hệ thống. Nên tiện ích còn có giới hạn cần đƣợc phát triển.
Hiển thị hạn chót nộp bài, gửi hạn chót đƣợc kèm với mẫu thông báo qua mail theo ngôn ngữ.
Khi lấy dữ liệu ra, hạn chót sẽ hiển thị theo hệ thống máy tính (tiếng Anh). Dùng Zend_Date để thay đổi phần hiển thị này, để tuân theo cách hoạt động của mô hình MVC, ta cần phải thêm và sửa đổi một số mã trong nguồn hệ thống:
• Sửa lại hàm putInView (đây là hàm dùng để quy định phần hiển thị trong view) của model ConfigRow.
• Thêm một hàm formatDate trong thƣ viện Zmax_view_PhpLib (đây là lớp quy định tổng quát việc hiển thị trong ở mọi view). Hàm này là hàm sẽ thay đổi ngày tháng theo ngôn ngữ ngƣời dùng chọn.
$deadTime chứa dữ liệu lấy từ CSDL. Dùng hàm date() của php để đổi dạng ngày theo đúng dạng của Zend_Date („d-m-Y‟). Khởi tạo đối tƣợng Zend_Date() theo ngày vừa mới tạo. Xác định ngôn ngữ ngƣời dùng đang chọn vào biến $locale. Cuối cùng dùng hàm get() để lấy ngày có theo đối tƣợng ngày ở tham số một là Zend_Date∷Date_Full (là hằng số cho ra thứ, ngày tháng năm đầy đủ) và theo định dạng ngày ở quốc gia nào đƣợc khai báo ở tham số hai $locale.
• Để thông báo khi nộp bài thành công cũng nhƣ mail thông báo gửi cho tác giả có thể hiển thị ngày tháng nhƣ ta mong muốn thì cần phải thêm dòng
vào phần kiểm tra bài viết nộp không có lỗi, dòng này giúp viết quy định view hiển thị đúng yêu cầu.
Gửi mail khi có tác giả upload tập tin bài báo đầy đủ lên hệ thống
Về chức năng này, tuy là Myreview có định hƣớng nhƣng trong hệ thống thì không có hỗ trợ việc gửi mail khi uploadAction() đƣợc thực hiện. Việc thêm tính năng cũng không khó vì nó cũng sẽ giống nhƣ việc mail ở các action khác, nhƣng chỉ khác là khi setTo() là hàm dùng để đặt địa chỉ ngƣời nhận thì đặt vào mail của chủ tịch hội thảo.
Thêm đoạn code sau vào gần cuối của uploadAction, thì khi upload thành công, mail sẽ đƣợc thông báo cho chủ tịch, nếu nhƣ chủ tịch muốn mail thông báo cho mình, việc này có thể đƣợc cấu hình trong form cấu hình của hệ thống. Để có thể lấy đƣợc thông tin chính xác về bài báo cũng nhƣ ngƣời đã tƣơng tác nộp bài báo lên, cần phải đƣa $paperRow (đối tƣợng của lớp Paper) vào view.
Gửi mail nhắc nhở đến các tác giả chƣa nộp bài báo hoàn chỉnh
Mail này với loại mail là SOME_MISS_UPLOAD, hình thức nội dung của hiệu chỉnh này cũng tƣơng tự nhƣ với một ngƣời nhận xét chƣa nộp bài đánh giá của mình(SOME_MISS_REVIEW), chỉ khác phần truy vấn dữ liệu thôi.
Trong hàm send() của lớp Mail là hàm sẽ phân loại ngƣời đƣợc gửi theo từng loại mail. Nhƣ đoạn code trên, là truy vấn lấy emailcontact của Paper chƣa nộp bài đầy đủ. Vì loại mail gửi cho nhìu ngƣời, có thể có một số email sẽ bị lỗi trong quá trình gửi. Để xác định mail nào bị lỗi, thì đƣa các mail lỗi vào 1 phần tử có mã là 2 của mảng stt, còn phần tử 0 chứa số mail gửi thành công, phần tử 1 chứa số mail thất bại. Tuy nhiên, khi sử dụng Postfix, các mail không có thực đều vẫn thông báo trong code là thành công vì Postfix sự tự động chuyển tiếp nội dung gửi cho mail lỗi đến mail của quản trị.
Code trên dùng để phân loại hiển thị tùy theo loại mail, nó đƣợc nằm bên trong sendAction() tức là hàm đƣợc gọi khi ngƣời dùng nhấn gửi. Khi phần tử 0 của mảng $stt là số mail thành công khác 0 thì xuất ra số mail thành công, nếu bị lỗi tức $stt[1] khác 0, thì thông báo số mail cùng với tên mail bị lỗi.