Пример #1
0
 def open_book(self, item):
     book_list = self.library.loadBookData()
     if book_list:
         for book in book_list:
             if book.title == str(item.text()):
                 self.bookitem = BookPageGUI(book, None)
                 self.bookitem.show()
                 self.bookitem.closeBookButton.hide(
                 )  #hiding the activities only available for user
                 self.bookitem.rate_label.hide()
                 self.bookitem.read_button.hide()
                 self.bookitem.SubmitButton.hide()
                 self.bookitem.invite_Button.hide()
                 self.bookitem.invite_Input.hide()
                 self.bookitem.write_label.hide()
                 self.bookitem.rate_label.hide()
                 self.bookitem.rate_lineEdit.hide()
                 #self.bookitem.comments_label.hide()
                 self.bookitem.comments_input.hide()
                 self.bookitem.complaint_button.hide()
                 self.bookitem.complaint_label.hide()
                 self.bookitem.complaint_input.hide()
                 break
         else:
             print("book not find")
Пример #2
0
 def open_book(self, item):
     book_list = self.library.loadBookData()  #loading all books from book database
     for book in book_list:
         if book.title == str(item.text()):
             self.bookitem = BookPageGUI(book, self.user) #opening the book page for selected book
             self.bookitem.show()
             break
     else:
         print("book not find") #if book title not in catalog then print message book not find
Пример #3
0
class Visitor_MainWindow(object):
    def __init__(self, library):
        self.library = library
        self.library.remove_book_with_nobody_read(
        )  # remove book with no one read for 2 min
        self.user = None
        self.apply = User("", "")
        self.catalog = self.library.Catalog()

    def setupUi(self, MainWindow):
        """
        This function is create by PyQt4 UI code generator. But we did some change.
        This function set up visitor page GUI.
        :return:
        """
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(917, 606)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.signinButton = QtGui.QPushButton(self.centralwidget)
        self.signinButton.setGeometry(QtCore.QRect(750, 100, 75, 23))
        self.signinButton.setObjectName(_fromUtf8("signinButton"))
        self.signUpButton = QtGui.QPushButton(self.centralwidget)
        self.signUpButton.setGeometry(QtCore.QRect(750, 320, 75, 23))
        self.signUpButton.setObjectName(_fromUtf8("signUpButton"))
        self.layoutWidget = QtGui.QWidget(self.centralwidget)
        self.layoutWidget.setGeometry(QtCore.QRect(690, 10, 201, 82))
        self.layoutWidget.setObjectName(_fromUtf8("layoutWidget"))
        self.verticalLayout = QtGui.QVBoxLayout(self.layoutWidget)
        self.verticalLayout.setMargin(0)
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        self.warning = QtGui.QLabel(self.layoutWidget)
        self.warning.setEnabled(True)
        self.warning.setText(_fromUtf8(""))
        self.warning.setObjectName(_fromUtf8("warning"))
        self.verticalLayout.addWidget(self.warning)
        self.horizontalLayout = QtGui.QHBoxLayout()
        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
        self.userNameLaber = QtGui.QLabel(self.layoutWidget)
        self.userNameLaber.setObjectName(_fromUtf8("userNameLaber"))
        self.horizontalLayout.addWidget(self.userNameLaber)
        self.usernameInput = QtGui.QLineEdit(self.layoutWidget)
        self.usernameInput.setObjectName(_fromUtf8("usernameInput"))
        self.horizontalLayout.addWidget(self.usernameInput)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.horizontalLayout_2 = QtGui.QHBoxLayout()
        self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
        self.passwordLabel = QtGui.QLabel(self.layoutWidget)
        self.passwordLabel.setObjectName(_fromUtf8("passwordLabel"))
        self.horizontalLayout_2.addWidget(self.passwordLabel)
        self.passwordInput = QtGui.QLineEdit(self.layoutWidget)
        self.passwordInput.setEchoMode(QtGui.QLineEdit.Password)
        self.passwordInput.setObjectName(_fromUtf8("passwordInput"))
        self.horizontalLayout_2.addWidget(self.passwordInput)
        self.verticalLayout.addLayout(self.horizontalLayout_2)
        self.EbookLibraryTitle_label = QtGui.QLabel(self.centralwidget)
        self.EbookLibraryTitle_label.setGeometry(QtCore.QRect(20, 20, 361, 41))
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("Arial"))
        font.setPointSize(36)
        font.setBold(True)
        font.setWeight(75)
        self.EbookLibraryTitle_label.setFont(font)
        self.EbookLibraryTitle_label.setTextFormat(QtCore.Qt.PlainText)
        self.EbookLibraryTitle_label.setScaledContents(False)
        self.EbookLibraryTitle_label.setObjectName(
            _fromUtf8("EbookLibraryTitle_label"))
        self.EbookLibraryDescription_label = QtGui.QLabel(self.centralwidget)
        self.EbookLibraryDescription_label.setGeometry(
            QtCore.QRect(20, 60, 631, 21))
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("Arial"))
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        self.EbookLibraryDescription_label.setFont(font)
        self.EbookLibraryDescription_label.setObjectName(
            _fromUtf8("EbookLibraryDescription_label"))
        self.Createaccount_label = QtGui.QLabel(self.centralwidget)
        self.Createaccount_label.setGeometry(QtCore.QRect(720, 170, 161, 16))
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("Helvetica"))
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        self.Createaccount_label.setFont(font)
        self.Createaccount_label.setObjectName(
            _fromUtf8("Createaccount_label"))
        self.splitter = QtGui.QSplitter(self.centralwidget)
        self.splitter.setGeometry(QtCore.QRect(20, 100, 228, 32))
        self.splitter.setOrientation(QtCore.Qt.Horizontal)
        self.splitter.setObjectName(_fromUtf8("splitter"))
        self.searchInput = QtGui.QLineEdit(self.splitter)
        self.searchInput.setObjectName(_fromUtf8("searchInput"))
        self.searchButton = QtGui.QPushButton(self.splitter)
        self.searchButton.setObjectName(_fromUtf8("searchButton"))
        self.layoutWidget1 = QtGui.QWidget(self.centralwidget)
        self.layoutWidget1.setGeometry(QtCore.QRect(690, 200, 201, 116))
        self.layoutWidget1.setObjectName(_fromUtf8("layoutWidget1"))
        self.gridLayout = QtGui.QGridLayout(self.layoutWidget1)
        self.gridLayout.setMargin(0)
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        self.Firstname_label = QtGui.QLabel(self.layoutWidget1)
        self.Firstname_label.setObjectName(_fromUtf8("Firstname_label"))
        self.gridLayout.addWidget(self.Firstname_label, 0, 0, 1, 1)
        self.Firstname_input = QtGui.QLineEdit(self.layoutWidget1)
        self.Firstname_input.setObjectName(_fromUtf8("Firstname_input"))
        self.gridLayout.addWidget(self.Firstname_input, 0, 1, 1, 1)
        self.Lastname_label = QtGui.QLabel(self.layoutWidget1)
        self.Lastname_label.setObjectName(_fromUtf8("Lastname_label"))
        self.gridLayout.addWidget(self.Lastname_label, 1, 0, 1, 1)
        self.Lastname_input = QtGui.QLineEdit(self.layoutWidget1)
        self.Lastname_input.setObjectName(_fromUtf8("Lastname_input"))
        self.gridLayout.addWidget(self.Lastname_input, 1, 1, 1, 1)
        self.SignupUsername_label = QtGui.QLabel(self.layoutWidget1)
        self.SignupUsername_label.setObjectName(
            _fromUtf8("SignupUsername_label"))
        self.gridLayout.addWidget(self.SignupUsername_label, 2, 0, 1, 1)
        self.SignupUsername_input = QtGui.QLineEdit(self.layoutWidget1)
        self.SignupUsername_input.setObjectName(
            _fromUtf8("SignupUsername_input"))
        self.gridLayout.addWidget(self.SignupUsername_input, 2, 1, 1, 1)
        self.SignupPassword_label = QtGui.QLabel(self.layoutWidget1)
        self.SignupPassword_label.setObjectName(
            _fromUtf8("SignupPassword_label"))
        self.gridLayout.addWidget(self.SignupPassword_label, 3, 0, 1, 1)
        self.SignupPassword_input = QtGui.QLineEdit(self.layoutWidget1)
        self.SignupPassword_input.setObjectName(
            _fromUtf8("SignupPassword_input"))
        self.SignupPassword_input.setEchoMode(QtGui.QLineEdit.Password)
        self.gridLayout.addWidget(self.SignupPassword_input, 3, 1, 1, 1)
        self.BookCatalog = QtGui.QListWidget(self.centralwidget)
        self.BookCatalog.setGeometry(QtCore.QRect(20, 140, 651, 421))
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("Helvetica"))
        font.setPointSize(13)
        self.BookCatalog.setFont(font)
        self.BookCatalog.setObjectName(_fromUtf8("BookCatalog"))
        for i in range(len(self.catalog)):
            item = QtGui.QListWidgetItem()
            self.BookCatalog.addItem(item)
        self.verticalScrollBar = QtGui.QScrollBar(self.centralwidget)
        self.verticalScrollBar.setGeometry(QtCore.QRect(660, 140, 16, 421))
        self.verticalScrollBar.setOrientation(QtCore.Qt.Vertical)
        self.verticalScrollBar.setObjectName(_fromUtf8("verticalScrollBar"))
        self.username_warning_label = QtGui.QLabel(self.centralwidget)
        self.username_warning_label.setGeometry(QtCore.QRect(
            690, 130, 191, 16))
        self.username_warning_label.setObjectName(
            _fromUtf8("username_warning_label"))
        self.password_warning_label = QtGui.QLabel(self.centralwidget)
        self.password_warning_label.setGeometry(QtCore.QRect(
            690, 140, 201, 16))
        self.password_warning_label.setObjectName(
            _fromUtf8("password_warning_label"))
        self.labelf = QtGui.QLabel(self.centralwidget)
        self.labelf.setGeometry(QtCore.QRect(690, 350, 201, 16))
        self.labelf.setObjectName(_fromUtf8("labelf"))
        self.labelL = QtGui.QLabel(self.centralwidget)
        self.labelL.setGeometry(QtCore.QRect(690, 350, 201, 16))
        self.labelL.setObjectName(_fromUtf8("labelL"))
        self.labelsu = QtGui.QLabel(self.centralwidget)
        self.labelsu.setGeometry(QtCore.QRect(690, 360, 201, 16))
        self.labelsu.setObjectName(_fromUtf8("labelsu"))
        self.labelsp = QtGui.QLabel(self.centralwidget)
        self.labelsp.setGeometry(QtCore.QRect(690, 360, 201, 16))
        self.labelsp.setObjectName(_fromUtf8("labelsp"))
        ##
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 917, 22))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        self.menuFile = QtGui.QMenu(self.menubar)
        self.menuFile.setObjectName(_fromUtf8("menuFile"))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        MainWindow.setStatusBar(self.statusbar)
        self.actionClose = QtGui.QAction(MainWindow)
        self.actionClose.setObjectName(_fromUtf8("actionClose"))
        self.menuFile.addAction(self.actionClose)
        self.menubar.addAction(self.menuFile.menuAction())

        self.retranslateUi(MainWindow)

        QtCore.QObject.connect(self.signinButton,
                               QtCore.SIGNAL(_fromUtf8("clicked()")),
                               self.signIn)
        QtCore.QObject.connect(self.signUpButton,
                               QtCore.SIGNAL(_fromUtf8("clicked()")),
                               self.signUp)
        QtCore.QObject.connect(self.searchButton,
                               QtCore.SIGNAL(_fromUtf8("clicked()")),
                               self.searchBook)
        QtCore.QObject.connect(self.BookCatalog,
                               QtCore.SIGNAL("itemClicked(QListWidgetItem *)"),
                               self.open_book)
        QtCore.QObject.connect(self.verticalScrollBar,
                               QtCore.SIGNAL(_fromUtf8("sliderMoved(int)")),
                               self.BookCatalog.scrollToBottom)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def open_book(self, item):
        book_list = self.library.loadBookData()
        if book_list:
            for book in book_list:
                if book.title == str(item.text()):
                    self.bookitem = BookPageGUI(book, None)
                    self.bookitem.show()
                    self.bookitem.closeBookButton.hide(
                    )  #hiding the activities only available for user
                    self.bookitem.rate_label.hide()
                    self.bookitem.read_button.hide()
                    self.bookitem.SubmitButton.hide()
                    self.bookitem.invite_Button.hide()
                    self.bookitem.invite_Input.hide()
                    self.bookitem.write_label.hide()
                    self.bookitem.rate_label.hide()
                    self.bookitem.rate_lineEdit.hide()
                    #self.bookitem.comments_label.hide()
                    self.bookitem.comments_input.hide()
                    self.bookitem.complaint_button.hide()
                    self.bookitem.complaint_label.hide()
                    self.bookitem.complaint_input.hide()
                    break
            else:
                print("book not find")

    def searchBook(self):
        """

        :return:
        """
        for i in range(len(self.catalog)):
            item = self.BookCatalog.item(i)
            item.setText(_translate("MainWindow", "", None))
        keyWord = str(self.searchInput.text())
        result = self.library.searchBook(keyWord)
        if len(result) == 0:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry',
                                      'Sorry, we can not find any result.')
        else:
            for i in range(len(result)):
                item = self.BookCatalog.item(i)
                item.setText(_translate("MainWindow", result[i].title, None))
        self.searchInput.setText("")

    def signUp(self):
        firstname = str(self.Firstname_input.text())
        lastname = str(self.Lastname_input.text())
        username = str(self.SignupUsername_input.text())
        password = str(self.SignupPassword_input.text())
        if not username:
            self.labelsu.setText(_fromUtf8("Username is required!"))
            print("username is required")
        elif not password:
            self.labelsp.setText(_fromUtf8("Password is required!"))
            print("password is required")
        else:
            user_list = self.library.loadUserData()
            for user in user_list:
                if username == user.username:
                    self.labelsu.setText(_fromUtf8("Username is used!"))
                    break
            else:
                self.apply.username = username
                self.apply.password = password
                self.apply.activate = False
                self.library.update_user_data(self.apply)
                self.Firstname_input.setText("")
                self.Lastname_input.setText("")
                self.SignupUsername_input.setText("")
                self.SignupPassword_input.setText("")
                QtGui.QMessageBox.warning(
                    QtGui.QDialog(), 'congratulate',
                    'apply successful, please waiting for superuser activate account!'
                )

    def signIn(self):
        inputUsername = self.usernameInput.text()
        inputPassword = self.passwordInput.text()
        user = None

        if not inputUsername:
            self.username_warning_label.setText(
                _fromUtf8("Username is required!"))
            print("username is required")
        elif not inputPassword:
            self.password_warning_label.setText(
                _fromUtf8("Password is required!"))
            print("password is required")
        else:
            self.username_warning_label.setText(_fromUtf8(""))
            self.password_warning_label.setText(_fromUtf8(""))
            user_list = self.library.loadUserData()
            for user in user_list:
                if user.username == inputUsername:
                    if user.password == inputPassword:
                        if user.black_list is False:
                            if user.activate is True:
                                self.SuperUserPage = SuperUserPage(
                                    user, self.library)
                                self.SuperUserPage.show()
                                break
                            else:
                                self.password_warning_label.setText(
                                    _fromUtf8("user is not activity!!"))
                                break
                        else:
                            self.password_warning_label.setText(
                                _fromUtf8("user is in black list!!"))
                            break
                    else:
                        self.password_warning_label.setText(
                            _fromUtf8("Password is wrong!!"))
                        break
                        # QtGui.QMessageBox.warning(QtGui.QDialog(), 'warning', 'password is wrong!!')
            else:
                self.username_warning_label.setText(
                    _fromUtf8("username is wrong!!"))
        self.usernameInput.setText("")  #clearing up usernameInput box
        self.passwordInput.setText("")  #clearing up password Input box

    def retranslateUi(self, MainWindow):
        """
        This function is create by PyQt4 UI code generator. But we did some change.
        This function set text to label, button and table.
        :return:
        """
        MainWindow.setWindowTitle(
            _translate("MainWindow", "Ebook Library", None))
        self.signinButton.setText(_translate("MainWindow", "sign in", None))
        self.signUpButton.setText(_translate("MainWindow", "Apply", None))
        self.userNameLaber.setText(_translate("MainWindow", "User name:",
                                              None))
        self.passwordLabel.setText(_translate("MainWindow", "Password:"******"MainWindow", "Ebook Library", None))
        self.EbookLibraryDescription_label.setText(
            _translate(
                "MainWindow",
                "An Innovative Ebook Library that lets you share books and earn reading points",
                None))
        self.Createaccount_label.setText(
            _translate("MainWindow", "Apply to be a User", None))
        self.searchButton.setText(_translate("MainWindow", "Search", None))
        __sortingEnabled = self.BookCatalog.isSortingEnabled()

        self.BookCatalog.setSortingEnabled(False)
        books = self.library.Catalog()
        if books:
            for i in range(len(books)):
                item = self.BookCatalog.item(i)
                item.setText(_translate("MainWindow", books[i].title, None))
        self.BookCatalog.setSortingEnabled(__sortingEnabled)

        self.Firstname_label.setText(
            _translate("MainWindow", "First Name:", None))
        self.Lastname_label.setText(
            _translate("MainWindow", "Last Name:", None))
        self.SignupUsername_label.setText(
            _translate("MainWindow", "User Name:", None))
        self.SignupPassword_label.setText(
            _translate("MainWindow", "Password:"******"MainWindow", "File", None))
        self.actionClose.setText(_translate("MainWindow", "Close", None))
Пример #4
0
class SuperUserPage(QtGui.QWidget):
    def __init__(self, user, library):
        self.user = user
        self.library = library
        self.library.remove_book_with_nobody_read()
        self.upload_book = Book("","",0)
        self.upload_book.contribute_by = self.user
        QtGui.QWidget.__init__(self)
        self.setupUi(self)

    def setupUi(self, superUser):
        """
        This function is create by PyQt4 UI code generator. But we did some change.
        This function set up superuser page GUI.
        :return:
        """
        superUser.setObjectName(_fromUtf8("superUser"))
        if self.user.superUser is True:
            superUser.resize(1350, 615)
        else:
            superUser.resize(800, 615)
        self.search_Input = QtGui.QLineEdit(superUser)
        self.search_Input.setGeometry(QtCore.QRect(31, 32, 133, 20))
        self.search_Input.setObjectName(_fromUtf8("search_Input"))
        self.search_Button = QtGui.QPushButton(superUser)
        self.search_Button.setGeometry(QtCore.QRect(170, 31, 75, 23))
        self.search_Button.setObjectName(_fromUtf8("search_Button"))
        self.contributLabel = QtGui.QLabel(superUser)
        self.contributLabel.setGeometry(QtCore.QRect(450, 130, 111, 21))
        self.contributLabel.setObjectName(_fromUtf8("contributLabel"))
        self.book_title_label = QtGui.QLabel(superUser)
        self.book_title_label.setGeometry(QtCore.QRect(360, 170, 71, 21))
        self.book_title_label.setObjectName(_fromUtf8("book_title_label"))
        self.point_requested_label = QtGui.QLabel(superUser)
        self.point_requested_label.setGeometry(QtCore.QRect(360, 200, 101, 31))
        self.point_requested_label.setObjectName(_fromUtf8("point_requested_label"))
        self.book_summary_label = QtGui.QLabel(superUser)
        self.book_summary_label.setGeometry(QtCore.QRect(360, 250, 93, 16))
        self.book_summary_label.setObjectName(_fromUtf8("book_summary_label"))
        self.book_title_input = QtGui.QLineEdit(superUser)
        self.book_title_input.setGeometry(QtCore.QRect(480, 170, 113, 20))
        self.book_title_input.setObjectName(_fromUtf8("book_title_input"))

        self.book_type_label = QtGui.QLabel(superUser)
        self.book_type_label.setGeometry(QtCore.QRect(630, 180, 71, 21))
        self.book_type_label.setObjectName(_fromUtf8("book_type_label"))
        self.book_type_input = QtGui.QLineEdit(superUser)
        self.book_type_input.setGeometry(QtCore.QRect(630, 210, 113, 20))
        self.book_type_input.setObjectName(_fromUtf8("book_type_input"))

        self.point_requested_input = QtGui.QLineEdit(superUser)
        self.point_requested_input.setGeometry(QtCore.QRect(480, 210, 113, 20))
        self.point_requested_input.setObjectName(_fromUtf8("point_requested_input"))
        self.book_summary_input = QtGui.QTextEdit(superUser)
        self.book_summary_input.setGeometry(QtCore.QRect(480, 250, 201, 61))
        self.book_summary_input.setObjectName(_fromUtf8("book_summary_input"))
        self.coverpage_button = QtGui.QPushButton(superUser)
        self.coverpage_button.setGeometry(QtCore.QRect(360, 330, 101, 41))
        self.coverpage_button.setObjectName(_fromUtf8("coverpage_button"))
        self.upload_book_button = QtGui.QPushButton(superUser)
        self.upload_book_button.setGeometry(QtCore.QRect(500, 330, 110, 41))
        self.upload_book_button.setObjectName(_fromUtf8("upload_book_button"))
        self.submit_button = QtGui.QPushButton(superUser)
        self.submit_button.setGeometry(QtCore.QRect(630, 330, 111, 41))
        self.submit_button.setObjectName(_fromUtf8("submit_button"))
        self.request_Table = QtGui.QTableWidget(superUser)
        self.request_Table.setGeometry(QtCore.QRect(340, 430, 441, 161))
        self.request_Table.setObjectName(_fromUtf8("request_Table"))
        self.request_Table.setColumnCount(3)
        self.request_Table.setRowCount(3)
        item = QtGui.QTableWidgetItem()
        self.request_Table.setVerticalHeaderItem(0, item)
        item = QtGui.QTableWidgetItem()
        self.request_Table.setVerticalHeaderItem(1, item)
        item = QtGui.QTableWidgetItem()
        self.request_Table.setVerticalHeaderItem(2, item)
        item = QtGui.QTableWidgetItem()
        self.request_Table.setHorizontalHeaderItem(0, item)
        item = QtGui.QTableWidgetItem()
        self.request_Table.setHorizontalHeaderItem(1, item)
        item = QtGui.QTableWidgetItem()
        self.request_Table.setHorizontalHeaderItem(2, item)
        self.request_List_Label = QtGui.QLabel(superUser)
        self.request_List_Label.setGeometry(QtCore.QRect(360, 400, 211, 16))
        self.request_List_Label.setObjectName(_fromUtf8("request_List_Label"))

        if self.user.superUser is True:     # check user is superuser or not, for superuser,we add some feature that only superuser need.
            self.request_Table_superuser = QtGui.QTableWidget(superUser)
            self.request_Table_superuser.setGeometry(QtCore.QRect(800, 90, 441, 131))
            self.request_Table_superuser.setObjectName(_fromUtf8("request_Table_superuser"))
            self.request_Table_superuser.setColumnCount(3)
            self.request_Table_superuser.setRowCount(3)
            item = QtGui.QTableWidgetItem()
            self.request_Table_superuser.setVerticalHeaderItem(0, item)
            item = QtGui.QTableWidgetItem()
            self.request_Table_superuser.setVerticalHeaderItem(1, item)
            item = QtGui.QTableWidgetItem()
            self.request_Table_superuser.setVerticalHeaderItem(2, item)
            item = QtGui.QTableWidgetItem()
            self.request_Table_superuser.setHorizontalHeaderItem(0, item)
            item = QtGui.QTableWidgetItem()
            self.request_Table_superuser.setHorizontalHeaderItem(1, item)
            item = QtGui.QTableWidgetItem()
            self.request_Table_superuser.setHorizontalHeaderItem(2, item)
            self.request_List_superuser_Label = QtGui.QLabel(superUser)
            self.request_List_superuser_Label.setGeometry(QtCore.QRect(800, 55, 211, 16))
            self.request_List_superuser_Label.setObjectName(_fromUtf8("request_List_superuser_Label"))
            self.decide_button = QtGui.QPushButton(superUser)
            self.decide_button.setGeometry(QtCore.QRect(1150, 100, 71, 31))
            self.decide_button.setObjectName(_fromUtf8("decide_button"))

            self.user_active_table = QtGui.QTableWidget(superUser)
            self.user_active_table.setGeometry(QtCore.QRect(800, 270, 441, 131))
            self.user_active_table.setObjectName(_fromUtf8("user_active_table"))
            self.user_active_table.setColumnCount(3)
            self.user_active_table.setRowCount(3)
            item = QtGui.QTableWidgetItem()
            self.user_active_table.setVerticalHeaderItem(0, item)
            item = QtGui.QTableWidgetItem()
            self.user_active_table.setVerticalHeaderItem(1, item)
            item = QtGui.QTableWidgetItem()
            self.user_active_table.setVerticalHeaderItem(2, item)
            item = QtGui.QTableWidgetItem()
            self.user_active_table.setHorizontalHeaderItem(0, item)
            item = QtGui.QTableWidgetItem()
            self.user_active_table.setHorizontalHeaderItem(1, item)
            item = QtGui.QTableWidgetItem()
            self.user_active_table.setHorizontalHeaderItem(2, item)
            self.user_active_Label = QtGui.QLabel(superUser)
            self.user_active_Label.setGeometry(QtCore.QRect(800, 250, 211, 16))
            self.user_active_Label.setObjectName(_fromUtf8("user_active_Label"))
            self.active_button = QtGui.QPushButton(superUser)
            self.active_button.setGeometry(QtCore.QRect(1150, 300, 71, 31))
            self.active_button.setObjectName(_fromUtf8("active_button"))
            self.not_active_button = QtGui.QPushButton(superUser)
            self.not_active_button.setGeometry(QtCore.QRect(1150, 350, 71, 31))
            self.not_active_button.setObjectName(_fromUtf8("not_active_button"))

            self.complain_table = QtGui.QTableWidget(superUser)
            self.complain_table.setGeometry(QtCore.QRect(800, 440, 341, 131))
            self.complain_table.setObjectName(_fromUtf8("complain_table"))
            self.complain_table.setColumnCount(2)
            self.complain_table.setRowCount(3)
            item = QtGui.QTableWidgetItem()
            self.complain_table.setVerticalHeaderItem(0, item)
            item = QtGui.QTableWidgetItem()
            self.complain_table.setVerticalHeaderItem(1, item)
            item = QtGui.QTableWidgetItem()
            self.complain_table.setVerticalHeaderItem(2, item)
            item = QtGui.QTableWidgetItem()
            self.complain_table.setHorizontalHeaderItem(0, item)
            item = QtGui.QTableWidgetItem()
            self.complain_table.setHorizontalHeaderItem(1, item)
            self.complain_table.horizontalHeader().setStretchLastSection(True)
            self.complain_Label = QtGui.QLabel(superUser)
            self.complain_Label.setGeometry(QtCore.QRect(800, 420, 211, 16))
            self.complain_Label.setObjectName(_fromUtf8("complain_Label"))
            self.accept_complain_button = QtGui.QPushButton(superUser)
            self.accept_complain_button.setGeometry(QtCore.QRect(1150, 460, 71, 30))
            self.accept_complain_button.setObjectName(_fromUtf8("accept_complain_button"))
            self.reject_complain_button = QtGui.QPushButton(superUser)
            self.reject_complain_button.setGeometry(QtCore.QRect(1150, 500, 71, 30))
            self.reject_complain_button.setObjectName(_fromUtf8("reject_complain_button"))
            self.serious_complain_button = QtGui.QPushButton(superUser)
            self.serious_complain_button.setGeometry(QtCore.QRect(1150, 540, 71, 30))
            self.serious_complain_button.setObjectName(_fromUtf8("serious_complain_button"))

            self.user_add_point_label = QtGui.QLabel(superUser)
            self.user_add_point_label.setGeometry(QtCore.QRect(1000, 10, 100, 16))
            self.user_add_point_label.setObjectName(_fromUtf8("user_add_point_label"))
            self.user_add_point_input = QtGui.QLineEdit(superUser)
            self.user_add_point_input.setGeometry(QtCore.QRect(1000, 30, 113, 20))
            self.user_add_point_input.setObjectName(_fromUtf8("user_add_point_input"))
            self.point_for_user_add_point_label = QtGui.QLabel(superUser)
            self.point_for_user_add_point_label.setGeometry(QtCore.QRect(1120, 10, 100, 16))
            self.point_for_user_add_point_label.setObjectName(_fromUtf8("point_for_user_add_point_label"))
            self.point_for_user_add_point_input = QtGui.QLineEdit(superUser)
            self.point_for_user_add_point_input.setGeometry(QtCore.QRect(1120, 30, 113, 20))
            self.point_for_user_add_point_input.setObjectName(_fromUtf8("point_for_user_add_point_input"))
            self.user_add_point_button = QtGui.QPushButton(superUser)
            self.user_add_point_button.setGeometry(QtCore.QRect(1160, 55, 71, 25))
            self.user_add_point_button.setObjectName(_fromUtf8("user_add_point_button"))

        self.approve_button = QtGui.QPushButton(superUser)
        self.approve_button.setGeometry(QtCore.QRect(700, 450, 71, 31))
        self.approve_button.setObjectName(_fromUtf8("approve_button"))
        self.denied_button = QtGui.QPushButton(superUser)
        self.denied_button.setGeometry(QtCore.QRect(700, 500, 71, 31))
        self.denied_button.setObjectName(_fromUtf8("denied_button"))

        self.point_Label = QtGui.QLabel(superUser)
        self.point_Label.setGeometry(QtCore.QRect(360, 90, 78, 16))
        self.point_Label.setObjectName(_fromUtf8("point_Label"))
        self.points_number_Label = QtGui.QLabel(superUser)
        self.points_number_Label.setGeometry(QtCore.QRect(470, 90, 61, 21))
        self.points_number_Label.setObjectName(_fromUtf8("points_number_Label"))
        self.username_Label = QtGui.QLabel(superUser)
        self.username_Label.setGeometry(QtCore.QRect(360, 50, 40, 16))
        self.username_Label.setObjectName(_fromUtf8("username_Label"))
        self.name_In_Label = QtGui.QLabel(superUser)
        self.name_In_Label.setGeometry(QtCore.QRect(420, 50, 100, 21))
        self.name_In_Label.setObjectName(_fromUtf8("name_In_Label"))

        self.top5_Label = QtGui.QLabel(superUser)
        self.top5_Label.setGeometry(QtCore.QRect(30, 90, 74, 16))
        self.top5_Label.setObjectName(_fromUtf8("top5_Label"))
        self.top5_List = QtGui.QListWidget(superUser)
        self.top5_List.setGeometry(QtCore.QRect(30, 130, 209, 163))
        self.top5_List.setObjectName(_fromUtf8("top5_List"))
        for i in range(5):
            item = QtGui.QListWidgetItem()
            self.top5_List.addItem(item)
        self.history_Label = QtGui.QLabel(superUser)
        self.history_Label.setGeometry(QtCore.QRect(30, 340, 100, 16))
        self.history_Label.setObjectName(_fromUtf8("history_Label"))
        self.history_List = QtGui.QListWidget(superUser)
        self.history_List.setGeometry(QtCore.QRect(30, 370, 280, 164))
        self.history_List.setObjectName(_fromUtf8("history_List"))




        self.inviter_table = QtGui.QTableWidget(superUser)
        self.inviter_table.setGeometry(QtCore.QRect(550, 30, 230, 100))
        self.inviter_table.setObjectName(_fromUtf8("inviter_table "))
        self.inviter_table.setColumnCount(2)
        self.inviter_table.setRowCount(2)
        item = QtGui.QTableWidgetItem()
        self.inviter_table.setVerticalHeaderItem(0, item)
        item = QtGui.QTableWidgetItem()
        self.inviter_table.setVerticalHeaderItem(1, item)

        item = QtGui.QTableWidgetItem()
        self.inviter_table.setHorizontalHeaderItem(0, item)
        item = QtGui.QTableWidgetItem()
        self.inviter_table.setHorizontalHeaderItem(1, item)

        self.inviter_table_label = QtGui.QLabel(superUser)
        self.inviter_table_label.setGeometry(QtCore.QRect(610, 15, 211, 16))
        self.inviter_table_label.setObjectName(_fromUtf8("user_active_Label"))

        self.accept_Button = QtGui.QPushButton(superUser)
        self.accept_Button.setGeometry(QtCore.QRect(710, 5, 75, 23))
        self.accept_Button.setObjectName(_fromUtf8("accept_Button"))




        for i in range(len(self.user.readingHistory)):
            item = QtGui.QListWidgetItem()
            self.history_List.addItem(item)


        self.retranslateUi(superUser)

        QtCore.QObject.connect(self.search_Button, QtCore.SIGNAL(_fromUtf8("clicked()")), self.searchBook)

        QtCore.QObject.connect(self.accept_Button, QtCore.SIGNAL(_fromUtf8("clicked()")), self.accept)

        QtCore.QObject.connect(self.top5_List, QtCore.SIGNAL("itemClicked(QListWidgetItem *)"), self.open_book)
        QtCore.QObject.connect(self.upload_book_button, QtCore.SIGNAL(_fromUtf8("clicked()")), self.selectFile)
        QtCore.QObject.connect(self.coverpage_button, QtCore.SIGNAL(_fromUtf8("clicked()")), self.selectCoverPage)
        QtCore.QObject.connect(self.submit_button, QtCore.SIGNAL(_fromUtf8("clicked()")), self.submit)
        if self.user.superUser is True:
            QtCore.QObject.connect(self.decide_button, QtCore.SIGNAL(_fromUtf8("clicked()")), self.decide)
            QtCore.QObject.connect(self.active_button, QtCore.SIGNAL(_fromUtf8("clicked()")), self.active)
            QtCore.QObject.connect(self.not_active_button, QtCore.SIGNAL(_fromUtf8("clicked()")), self.not_active)
            QtCore.QObject.connect(self.accept_complain_button, QtCore.SIGNAL(_fromUtf8("clicked()")), self.accept_complain)
            QtCore.QObject.connect(self.reject_complain_button, QtCore.SIGNAL(_fromUtf8("clicked()")), self.reject_complain)
            QtCore.QObject.connect(self.serious_complain_button, QtCore.SIGNAL(_fromUtf8("clicked()")), self.serious_complain)
            QtCore.QObject.connect(self.user_add_point_button, QtCore.SIGNAL(_fromUtf8("clicked()")), self.user_add_point)

        QtCore.QObject.connect(self.approve_button, QtCore.SIGNAL(_fromUtf8("clicked()")), self.approve)
        QtCore.QObject.connect(self.denied_button, QtCore.SIGNAL(_fromUtf8("clicked()")), self.denied)

        QtCore.QMetaObject.connectSlotsByName(superUser)

    def user_add_point(self):
        """
        This function will add point to user.
        :return:
        """
        username = str(self.user_add_point_input.text())
        point = self.point_for_user_add_point_input.text()
        if not username:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'please input username!')
        elif not point:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'please input point!')
        else:
            number_point = int(point)
            user = self.library.searchUser(username)
            if user:
                user.point += number_point
                self.library.update_user_data(user)
            else:
                QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', "we didn't find user!")

    def accept_complain(self):
        """
        This function will call when superuser click accept in complaint table.
        superuser accept complaint, so number of complaint for book will increase 1,
        then delete that complain and reset complaint table
        :return:
        """
        if self.complain_book:
            self.complain_book.number_of_complaint += 1
            del self.complain_book.complaint[0]
            if self.complain_book.number_of_complaint >= 3:
                self.library.update_book_data(self.complain_book, delete=True)   # delete book from book database
                user_who_contributed = self.library.searchUser(self.complain_book.contribute_by)  # get the user who contributed this book
                user_who_contributed.point -= self.complain_book.requestPoint + 100
                user_who_contributed.number_of_book_delete += 1
                if user_who_contributed.number_of_book_delete >= 2:
                    user_who_contributed.black_list = True
                self.library.update_user_data(user_who_contributed)    # update user data in database
            else:
                self.library.update_book_data(self.complain_book)
            self.set_complaint_table()
        else:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'no complaint!')

    def reject_complain(self):
        """
        This function will reject the complaint.
        :return:
        """
        if self.complain_book:
            del self.complain_book.complaint[0]        # delete that complaint
            self.library.update_book_data(self.complain_book)
            self.set_complaint_table()
        else:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'no complaint!')

    def serious_complain(self):
        """
        This function is for serious complaint, it will delete that book,
        add user who contributed this book to black list.
        :return:
        """
        if self.complain_book:
            self.library.update_book_data(self.complain_book, delete=True)
            user_who_contributed = self.library.searchUser(self.complain_book.contribute_by)  # get the user who contributed this book
            user_who_contributed.black_list = True          # add to black list
            self.library.update_user_data(user_who_contributed)
            self.set_complaint_table()
        else:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'no complaint!')     # if not more complaint

    def accept(self):

        if self.inviter is not None:
            print self.user.inviteDic
            print self.user.inviteDic[self.inviter].values()[0]
            self.user.inviteDic[self.inviter][self.user.inviteDic[self.inviter].keys()[0]] = True

            user_data = self.library.loadUserData()
            for user in user_data:
              if user.username == self.inviter:

                self.user.readingHistory[self.user.inviteDic[self.inviter].keys()[0]]=  0
                print self.user.readingHistory
            self.library.update_user_data(self.user)
            print self.user.inviteDic
            self.inviter = None
            self.set_inviter_table()
        else:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'no invitation!')

    def set_inviter_table(self):
        for index in range(2):
            item = QtGui.QTableWidgetItem()
            self.inviter_table.setItem(index, 0, item)
            item = QtGui.QTableWidgetItem()
            self.inviter_table.setItem(index, 1, item)

            item = self.inviter_table.item(index, 0)
            item.setText(_translate("superUser", "", None))
            item = self.inviter_table.item(index, 1)
            item.setText(_translate("superUser", "", None))
        self.inviter = None
        # self.approve_book = None
        inviter_data = self.user.inviteDic
        if inviter_data:
            index = 0
            for user in inviter_data:
                if inviter_data[user].values()[0] == False:
                #if user.activate is False:
                    if index is 0:
                        self.inviter = user
                    item = QtGui.QTableWidgetItem()
                    self.inviter_table.setItem(index, 0, item)
                    item = QtGui.QTableWidgetItem()
                    self.inviter_table.setItem(index, 1, item)

                    item = self.inviter_table.item(index, 0)
                    item.setText(_translate("User", user, None))
                    item = self.inviter_table.item(index, 1)
                    item.setText(_translate("User",inviter_data[user].keys()[0], None))

                    if index == 1:
                        break
                    else:
                       index += 1

    def active(self):
        """
        This function will activate the new register user.
        :return:
        """
        if self.user_need_activate:
            self.user_need_activate.activate = True
            self.library.update_user_data(self.user_need_activate)  # update user in user database
            self.user_need_activate = None
            self.set_user_active_table()
        else:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'not new user need activate!')

    def not_active(self):
        """
        This function will not activate the user, and delete the user form user database.
        :return:
        """
        if self.user_need_activate:
            self.library.update_user_data(self.user_need_activate, delete=True)   # delete user in database
            self.user_need_activate = None
            self.set_user_active_table()
        else:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'not new user need activate!')

    def approve(self):
        """
        This function will approve the book with superuser response.
        :return:
        """
        if self.approve_book:
            self.library.update_book_data(self.approve_book, "pending_book_data.pkl", delete=True)
            self.library.update_book_data(self.approve_book)
            self.user.point += self.approve_book.superuser_set_point   # user add the point which superuser decide
            self.points_number_Label.setText(_translate("superUser", str(self.user.point), None))   # update user point information in page
            self.user.own_book.append(self.approve_book)

            self.library.update_user_data(self.user)     # update user information in database
            self.set_superuser_response_table()   # refresh table
        else:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'not book need approve!')

    def denied(self):
        """
        This function will denied the book with superuser response.
        :return:
        """
        if self.approve_book:
            self.library.update_book_data(self.approve_book, "pending_book_data.pkl", delete=True)   # delete the book from pending book database
            self.set_superuser_response_table()
        else:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'not book need denied!')

    def decide(self):
        """
        superuser decide the book request point, and add to book.
        :return:
        """
        if self.decide_book:
            item = self.request_Table_superuser.item(0, 2)
            point = int(item.text())             # superuser input point
            self.decide_book.superuser_set_point = point
            self.library.update_book_data(self.decide_book, "pending_book_data.pkl")
            self.set_pending_book_table()
            self.set_superuser_response_table()
        else:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'not book need decide!')

    def set_pending_book_table(self):
        """
        This function set up pending book table.
        :return:
        """
        for index in range(3):
            item = QtGui.QTableWidgetItem()
            self.request_Table_superuser.setItem(index, 0, item)
            item = QtGui.QTableWidgetItem()
            self.request_Table_superuser.setItem(index, 1, item)
            item = QtGui.QTableWidgetItem()
            self.request_Table_superuser.setItem(index, 2, item)
            item = self.request_Table_superuser.item(index, 0)
            item.setText(_translate("superUser", "", None))       # set all box in table to empty first
            item = self.request_Table_superuser.item(index, 1)
            item.setText(_translate("superUser", "", None))
            item = self.request_Table_superuser.item(index, 2)
            item.setText(_translate("superUser", "", None))
        self.decide_book = None
        pending_book = self.library.loadBookData("pending_book_data.pkl")  # get all pending book
        if pending_book:
            index = 0
            for book in pending_book:
                if book.superuser_set_point == 0:   # check if super user didn't set point
                    if index == 0:
                        self.decide_book = book
                    item = QtGui.QTableWidgetItem()
                    self.request_Table_superuser.setItem(index, 0, item)
                    item = QtGui.QTableWidgetItem()
                    self.request_Table_superuser.setItem(index, 1, item)
                    item = QtGui.QTableWidgetItem()
                    self.request_Table_superuser.setItem(index, 2, item)
                    item = self.request_Table_superuser.item(index, 0)
                    item.setText(_translate("superUser", book.contribute_by, None))
                    item = self.request_Table_superuser.item(index, 1)
                    item.setText(_translate("superUser", book.title, None))   # set up book information
                    item = self.request_Table_superuser.item(index, 2)
                    item.setText(_translate("superUser", str(book.requestPoint), None))
                    print(index)
                    if index >= 2:
                        break
                    else:
                        index += 1


    def set_superuser_response_table(self):
        """
        This function set up superuser response table.
        :return:
        """
        for index in range(3):
            item = QtGui.QTableWidgetItem()
            self.request_Table.setItem(index, 0, item)
            item = QtGui.QTableWidgetItem()
            self.request_Table.setItem(index, 1, item)
            item = QtGui.QTableWidgetItem()
            self.request_Table.setItem(index, 2, item)
            item = self.request_Table.item(index, 0)
            item.setText(_translate("superUser", "", None))
            item = self.request_Table.item(index, 1)
            item.setText(_translate("superUser", "", None))   # set all box in table to empty first
            item = self.request_Table.item(index, 2)
            item.setText(_translate("superUser", "", None))
        self.approve_book = None
        pending_book = self.library.loadBookData("pending_book_data.pkl")
        if pending_book:
            index = 0
            for book in pending_book:
                if book.superuser_set_point != 0 and book.contribute_by == self.user.username:        # check if super user set point
                    if index == 0:
                        self.approve_book = book
                    item = QtGui.QTableWidgetItem()
                    self.request_Table.setItem(index, 0, item)
                    item = QtGui.QTableWidgetItem()
                    self.request_Table.setItem(index, 1, item)
                    item = QtGui.QTableWidgetItem()
                    self.request_Table.setItem(index, 2, item)
                    item = self.request_Table.item(index, 0)
                    item.setText(_translate("superUser", book.title, None))
                    item = self.request_Table.item(index, 1)
                    item.setText(_translate("superUser", str(book.requestPoint), None))   # set up book information
                    item = self.request_Table.item(index, 2)
                    item.setText(_translate("superUser", str(book.superuser_set_point), None))
                    print(index)
                    if index == 2:
                        break
                    else:
                        index += 1


    def set_user_active_table(self):
        """
        This function set up user activate table.
        :return:
        """
        for index in range(3):
            item = QtGui.QTableWidgetItem()
            self.user_active_table.setItem(index, 0, item)
            item = QtGui.QTableWidgetItem()
            self.user_active_table.setItem(index, 1, item)
            item = QtGui.QTableWidgetItem()
            self.user_active_table.setItem(index, 2, item)
            item = self.user_active_table.item(index, 0)
            item.setText(_translate("superUser", "", None))
            item = self.user_active_table.item(index, 1)
            item.setText(_translate("superUser", "", None))   # set all box in table to empty first
            item = self.user_active_table.item(index, 2)
            item.setText(_translate("superUser", "", None))
        self.user_need_activate = None
        user_data = self.library.loadUserData()   # get all user
        if user_data:
            index = 0
            for user in user_data:
                if user.activate is False:          # check user activate or not
                    if index is 0:
                        self.user_need_activate = user
                    item = QtGui.QTableWidgetItem()
                    self.user_active_table.setItem(index, 0, item)
                    item = QtGui.QTableWidgetItem()
                    self.user_active_table.setItem(index, 1, item)
                    item = QtGui.QTableWidgetItem()
                    self.user_active_table.setItem(index, 2, item)
                    item = self.user_active_table.item(index, 0)
                    item.setText(_translate("superUser", user.username, None))   # set up user information
                    item = self.user_active_table.item(index, 1)
                    item.setText(_translate("superUser", user.password, None))
                    item = self.user_active_table.item(index, 2)
                    item.setText(_translate("superUser", ' ', None))
                    if index == 2:
                        break
                    else:
                        index += 1


    def set_complaint_table(self):
        """
        This function set up complaint table.
        :return:
        """
        for index in range(3):
            item = QtGui.QTableWidgetItem()
            self.complain_table.setItem(index, 0, item)
            item = QtGui.QTableWidgetItem()
            self.complain_table.setItem(index, 1, item)
            item = self.complain_table.item(index, 0)
            item.setText(_translate("superUser", "", None))   # set all box in table to empty first
            item = self.complain_table.item(index, 1)
            item.setText(_translate("superUser", "", None))
        self.complain_book = None
        book_data = self.library.loadBookData()  # get all books
        if book_data:
            index = 0
            for book in book_data:
                if book.complaint:    # check if book got complaint
                    if index is 0:
                        self.complain_book = book
                    item = QtGui.QTableWidgetItem()
                    self.complain_table.setItem(index, 0, item)
                    item = QtGui.QTableWidgetItem()
                    self.complain_table.setItem(index, 1, item)
                    item = self.complain_table.item(index, 0)
                    item.setText(_translate("superUser", book.title, None))  # set up book information
                    item = self.complain_table.item(index, 1)
                    item.setText(_translate("superUser", book.complaint[0], None))
                    if index >= 2:
                        break
                    else:
                        index += 1


    def open_book(self, item):
        book_list = self.library.loadBookData()  #loading all books from book database
        for book in book_list:
            if book.title == str(item.text()):
                self.bookitem = BookPageGUI(book, self.user) #opening the book page for selected book
                self.bookitem.show()
                break
        else:
            print("book not find") #if book title not in catalog then print message book not find


    def selectFile(self): #select a text file to upload book to system
        file_name = QtGui.QFileDialog.getOpenFileName(self, 'Open file', '/home') #opening a QTfileDialogue to select file from computer
        if file_name:
            file_name_cut_list = str(file_name).split('/')
            print(file_name_cut_list)
            # if not self.upload_book.book_file:
            print file_name
            shutil.copy(str(file_name), 'PendingBooks') #copying the book file to pending books directory so super
                                #user can decide if book is to be added to catalog or not
            self.upload_book.book_file = file_name_cut_list[-1]
            print(self.upload_book.book_file)
            self.upload_book_button.setDisabled(True)


    def selectCoverPage(self):
        """
        This function select an image file to upload the book cover page
        :return:
        """
        image = QtGui.QFileDialog.getOpenFileName(self, 'Open file', '/home')     # opening a QTFileDialogue to select image form computer
        if image:
            file_name_cut_list = str(image).split('/')
            shutil.copy(str(image), 'CoverPage')      # copying the selected image file to Coverpage database
            self.upload_book.cover_page = file_name_cut_list[-1]
            self.coverpage_button.setDisabled(True)

    def submit(self):
        """
        This function will submit the contribute book form, and check all the input.
        If user fill all input, it will create the book object and save on pending_book_data database.
        :return:
        """
        title = str(self.book_title_input.text())
        summary = str(self.book_summary_input.toPlainText())   #get data from input
        points = int(self.point_requested_input.text())
        book_type = str(self.book_type_input.text())
        self.upload_book.contribute_by = self.user.username
        if not title:              # check if not title
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'Title is required')
        else:
            self.upload_book.title = title
        if not summary:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'summary is required')
        else:
            self.upload_book.summary = summary
        if not points:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'points is required')
        else:
            self.upload_book.requestPoint = points
        if not self.upload_book.cover_page:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'cover page need uploaded!!')
        if not self.upload_book.book_file:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'Book file need uploaded!!')
        if not book_type:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'Book type is required!!')
        else:       # if we have type
            self.upload_book.type = book_type    # add type to book object
        if title and summary and points and self.upload_book.book_file and self.upload_book.cover_page:  # check if we have everything
            self.upload_book.last_time_read = time.time()
            self.library.update_book_data(self.upload_book, "pending_book_data.pkl")
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Congratulations', 'successful!!')
            self.submit_button.setDisabled(True)
            if self.user.superUser is True:
                self.set_pending_book_table()


    def set_top5_list(self):
        """
        This function will check user's reading history first.
        If user has reading history, it will display books which has same type with the last book user read.
        If user has not reading history, it will display books which most people read.
        :return:
        """
        __sortingEnabled = self.top5_List.isSortingEnabled()
        self.top5_List.setSortingEnabled(False)
        reading_history = self.user.readingHistory.keys()
        if reading_history:
            book = self.library.search_book_by_title(reading_history[-1])
            print(book)
            if book:
                books = self.library.search_book_by_type(book.type)
            else:
                books = self.library.searchTop5()
        else:
            books = self.library.searchTop5()
        for i in range(len(books)):
            item = self.top5_List.item(i)
            item.setText(_translate("MainWindow", books[i].title, None))
        self.top5_List.setSortingEnabled(__sortingEnabled)

    def searchBook(self):
        """
        This function is for search book base on keyword user enter in input box.
        It will also set up result to list box.
        :return:
        """
        for i in range(5):
            item = self.top5_List.item(i)
            item.setText(_translate("MainWindow", "", None))
        keyWord = str(self.search_Input.text())
        result = self.library.searchBook(keyWord)
        if len(result) == 0:
            QtGui.QMessageBox.warning(QtGui.QDialog(), 'Sorry', 'Sorry, we can not find any result.')
        else:
            for i in range(len(result)):
                item = self.top5_List.item(i)
                item.setText(_translate("MainWindow", result[i].title, None))


    def retranslateUi(self, superUser):
        """
        This function is create by PyQt4 UI code generator. But we did some change.
        This function set up superuser page GUI.
        :return:
        """
        superUser.setWindowTitle(_translate("superUser", "Form", None))
        self.search_Button.setText(_translate("superUser", "Search", None))

        self.contributLabel.setText(_translate("superUser", "Contribute Books:", None))
        self.book_title_label.setText(_translate("superUser", "Book Title:", None))
        self.book_type_label.setText(_translate("superUser", "Book Type:", None))
        self.point_requested_label.setText(_translate("superUser", "point Requested:", None))
        self.book_summary_label.setText(_translate("superUser", "Book Summary:", None))
        self.coverpage_button.setText(_translate("superUser", "CoverPage", None))
        self.upload_book_button.setText(_translate("superUser", "Upload Book", None))
        self.submit_button.setText(_translate("superUser", "Submit", None))
        if self.user.superUser is True:      # check user is superuser or not, for superuser,we add some feature that only superuser need.
            self.decide_button.setText(_translate("superUser", "decide", None))
            item = self.request_Table_superuser.verticalHeaderItem(0)
            item.setText(_translate("superUser", "1", None))
            item = self.request_Table_superuser.verticalHeaderItem(1)
            item.setText(_translate("superUser", "2", None))
            item = self.request_Table_superuser.verticalHeaderItem(2)
            item.setText(_translate("superUser", "3", None))
            item = self.request_Table_superuser.horizontalHeaderItem(0)
            item.setText(_translate("superUser", "User Name", None))
            item = self.request_Table_superuser.horizontalHeaderItem(1)
            item.setText(_translate("superUser", "Book title", None))
            item = self.request_Table_superuser.horizontalHeaderItem(2)
            item.setText(_translate("superUser", "point requiest", None))
            __sortingEnabled = self.request_Table_superuser.isSortingEnabled()
            self.request_Table_superuser.setSortingEnabled(False)

            self.set_pending_book_table()
            self.request_Table_superuser.setSortingEnabled(__sortingEnabled)
            self.request_List_superuser_Label.setText(_translate("superUser", "Book contribute request List:", None))

            self.active_button.setText(_translate("superUser", "activate", None))
            self.not_active_button.setText(_translate("superUser", "delete", None))
            item = self.user_active_table.verticalHeaderItem(0)
            item.setText(_translate("superUser", "1", None))
            item = self.user_active_table.verticalHeaderItem(1)
            item.setText(_translate("superUser", "2", None))
            item = self.user_active_table.verticalHeaderItem(2)
            item.setText(_translate("superUser", "3", None))
            item = self.user_active_table.horizontalHeaderItem(0)
            item.setText(_translate("superUser", "User Name", None))
            item = self.user_active_table.horizontalHeaderItem(1)
            item.setText(_translate("superUser", "password", None))
            item = self.user_active_table.horizontalHeaderItem(2)
            item.setText(_translate("superUser", " ", None))
            __sortingEnabled = self.user_active_table.isSortingEnabled()
            self.user_active_table.setSortingEnabled(False)

            self.set_user_active_table()     # set up user activate table
            self.user_active_table.setSortingEnabled(__sortingEnabled)
            self.user_active_Label.setText(_translate("superUser", "new register user List:", None))

            self.accept_complain_button.setText(_translate("superUser", "accept", None))
            self.reject_complain_button.setText(_translate("superUser", "reject", None))
            self.serious_complain_button.setText(_translate("superUser", "punish", None))
            item = self.complain_table.verticalHeaderItem(0)
            item.setText(_translate("superUser", "1", None))
            item = self.complain_table.verticalHeaderItem(1)
            item.setText(_translate("superUser", "2", None))
            item = self.complain_table.verticalHeaderItem(2)
            item.setText(_translate("superUser", "3", None))
            item = self.complain_table.horizontalHeaderItem(0)
            item.setText(_translate("superUser", "book title", None))
            item = self.complain_table.horizontalHeaderItem(1)
            item.setText(_translate("superUser", "complaint reason", None))

            self.set_complaint_table()       # set up complaint_table
            __sortingEnabled = self.complain_table.isSortingEnabled()
            self.complain_table.setSortingEnabled(False)

            self.complain_table.setSortingEnabled(__sortingEnabled)
            self.complain_Label.setText(_translate("superUser", "complaint List:", None))

            self.user_add_point_label.setText(_translate("superUser", "username", None))
            self.point_for_user_add_point_label.setText(_translate("superUser", "point", None))
            self.user_add_point_button.setText(_translate("superUser", "Add", None))

        self.approve_button.setText(_translate("superUser", "approve", None))
        self.denied_button.setText(_translate("superUser", "denied", None))
        item = self.request_Table.verticalHeaderItem(0)
        item.setText(_translate("superUser", "1", None))
        item = self.request_Table.verticalHeaderItem(1)
        item.setText(_translate("superUser", "2", None))
        item = self.request_Table.verticalHeaderItem(2)
        item.setText(_translate("superUser", "3", None))
        item = self.request_Table.horizontalHeaderItem(0)
        item.setText(_translate("superUser", "Book title", None))
        item = self.request_Table.horizontalHeaderItem(1)
        item.setText(_translate("superUser", "requested point", None))
        item = self.request_Table.horizontalHeaderItem(2)
        item.setText(_translate("superUser", "SU set point", None))
        __sortingEnabled = self.request_Table.isSortingEnabled()
        self.request_Table.setSortingEnabled(False)

        self.set_superuser_response_table()

        self.request_Table.setSortingEnabled(__sortingEnabled)
        self.request_List_Label.setText(_translate("superUser", "superuser response:", None))

        self.point_Label.setText(_translate("superUser", "Total points:", None))
        self.points_number_Label.setText(_translate("superUser", str(self.user.point), None))
        self.username_Label.setText(_translate("superUser", "Name:", None))
        self.name_In_Label.setText(_translate("superUser", self.user.username, None))

       # self.inviter_name.setText(_translate("superUser", self.user.inviteDic.username, None))


        self.accept_Button.setText(_translate("superUser", "accept", None))

        self.top5_Label.setText(_translate("superUser", "recommended books or top 5 Books:", None))

        self.set_top5_list()   # set up top 5 list


        self.history_Label.setText(_translate("superUser", "Reading History:", None))
        __sortingEnabled = self.history_List.isSortingEnabled()
        self.history_List.setSortingEnabled(False)

        i=0
        for key, value in self.user.readingHistory.items():
        #for i in range(len(self.user.readingHistory)):
            item = self.history_List.item(i)
            item.setText(_translate("superUser", key + "    Status:You have "+ str(value) + " mins remained!" , None))
            i += 1

        self.history_List.setSortingEnabled(__sortingEnabled)

        self.accept_Button.setText(_translate("User", "accept", None))
        item = self.inviter_table.verticalHeaderItem(0)
        item.setText(_translate("User", "1", None))
        item = self.inviter_table.verticalHeaderItem(1)
        item.setText(_translate("User", "2", None))

        item = self.inviter_table.horizontalHeaderItem(0)
        item.setText(_translate("User", "InviterName", None))
        item = self.inviter_table.horizontalHeaderItem(1)
        item.setText(_translate("User", "BookName", None))

        __sortingEnabled = self.inviter_table.isSortingEnabled()
        self.inviter_table.setSortingEnabled(False)

        self.set_inviter_table()
        self.inviter_table.setSortingEnabled(__sortingEnabled)
        self.inviter_table_label.setText(_translate("User", "Inviter List:", None))