Author: JirkaM Date: 2010-02-18 18:02:56 +0100 (Thu, 18 Feb 2010) New Revision: 1784 Modified: trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserListBean.java trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/labels_cs.properties trunk/server/webServer2/WebContent/js/elvys-template.js trunk/server/webServer2/WebContent/secured/userrel/listOfUsers.xhtml trunk/server/webServer2/WebContent/styles/elvys-template.css Log: * upgrade list of users modified JavaSource/cz/elvys/webServer/beans/user/UserListBean.java modified JavaSource/cz/elvys/webServer/messages/labels_cs.properties modified WebContent/js/elvys-template.js modified WebContent/secured/userrel/listOfUsers.xhtml modified WebContent/styles/elvys-template.css Modified: trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserListBean.java =================================================================== --- trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserListBean.java 2010-02-18 16:55:15 UTC (rev 1783) +++ trunk/server/webServer2/JavaSource/cz/elvys/webServer/beans/user/UserListBean.java 2010-02-18 17:02:56 UTC (rev 1784) @@ -24,6 +24,7 @@ import org.hibernate.Transaction; import cz.elvys.webServer.HIBgen.Company; +import cz.elvys.webServer.HIBgen.File; import cz.elvys.webServer.HIBgen.Role; import cz.elvys.webServer.HIBgen.User; import cz.elvys.webServer.db.InitSessionFactory; @@ -34,52 +35,88 @@ /** * @author David - * + * */ public class UserListBean implements Serializable { // fields private Logger log; - + // const private static final long serialVersionUID = 8092026699388193893L; - + private List<User> users = null; private User selectedUser = null; - + + // filter variables + private String filterValue; + private UserBL userBL; - + public UserListBean() { log = Logger.getLogger(this.getClass()); this.userBL = Fact.getUserBL(); - } - + } + public List<User> getUsers() { return users; } + public void setUsers(List<User> users) { this.users = users; } + public User getSelectedUser() { return selectedUser; } + public void setSelectedUser(User selectedUser) { this.selectedUser = selectedUser; } - + /** * @return */ public String prepareListOfUsers() { UserLoginBean user = BeanManager.getUser(); int compID = user.getCompanyID(); - users = userBL.loadAllUsers(compID,user.getCompStr()); + users = userBL.loadAllUsers(compID, user.getCompStr()); return "listOfUsers"; } - - + public void deleteUser(ActionEvent aev) { userBL.deleteUser(selectedUser); users.remove(selectedUser); } - + + /** + * Method for filtering list of user in table. + * + * @param current + * @return + */ + public boolean filterByValue(Object current) { + User user = (User) current; + if (filterValue == null || filterValue.length() == 0) { + return true; + } + + String filterValueLowerCase = filterValue.toLowerCase(); + + if (user.getSurname().toLowerCase().contains(filterValueLowerCase)) { return true; } + if (user.getUsername().toLowerCase().contains(filterValueLowerCase)) { return true; } + if (user.getRealname().toLowerCase().contains(filterValueLowerCase)) { return true; } + if (user.getEmail().toLowerCase().contains(filterValueLowerCase)) { return true; } + if (user.getPhone().toLowerCase().contains(filterValueLowerCase)) { return true; } + + return false; + } + + public String getFilterValue() { + return filterValue; + } + + public void setFilterValue(String filterValue) { + this.filterValue = filterValue; + } + } Modified: trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/labels_cs.properties =================================================================== --- trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/labels_cs.properties 2010-02-18 16:55:15 UTC (rev 1783) +++ trunk/server/webServer2/JavaSource/cz/elvys/webServer/messages/labels_cs.properties 2010-02-18 17:02:56 UTC (rev 1784) @@ -108,8 +108,10 @@ user.list.body.surname=P\u0159\u00EDjmen\u00ED user.list.body.firstname=Jm\u00E9no user.list.body.role=Role -user.list.body.username=U\u017Eivatelsk\u00E9 jm\u00E9no -user.list.body.edit=\u00DAprava +user.list.body.username=Login +user.list.body.phone=Telefon +user.list.body.email=Email +user.list.body.edit=Operace user.list.body.edit.tooltip=Upravit u\u017Eivatele user.list.body.create.tooltip=Vytvo\u0159en\u00ED nov\u00E9ho u\u017Eivatele user.list.body.delete=Maz\u00E1n\u00ED @@ -481,4 +483,7 @@ report.result.didntShow=nevystaven report.result.noShowTitle=Seznam nezobrazen\u00FDch polo\u017Eek report.result.emptyResult=Litujeme, ale pro zobrazen\u00ED report\u016F je nutn\u00E9 vybrat dokumenty a kiosky -report.result.emptyResultLink=P\u0159ej\u00EDt na filtr pro zobrazen\u00ED reportu \ No newline at end of file +report.result.emptyResultLink=P\u0159ej\u00EDt na filtr pro zobrazen\u00ED reportu + +list.empty=Zadny zaznam +list.search=Vyhledat \ No newline at end of file Modified: trunk/server/webServer2/WebContent/js/elvys-template.js =================================================================== --- trunk/server/webServer2/WebContent/js/elvys-template.js 2010-02-18 16:55:15 UTC (rev 1783) +++ trunk/server/webServer2/WebContent/js/elvys-template.js 2010-02-18 17:02:56 UTC (rev 1784) @@ -6,4 +6,19 @@ winId=window.open('/webServer2/secured/layoutrel/layoutEdit.jsf','NOVEOKNO',features); // open an empty window winId.opener=this; +} + + +function setCaretToEnd(e) { + var control = $((e.target ? e.target : e.srcElement).id); + if (control.createTextRange) { + var range = control.createTextRange(); + range.collapse(false); + range.select(); + } else if (control.setSelectionRange) { + control.focus(); + var length = control.value.length; + control.setSelectionRange(length, length); + } + control.selectionStart = control.selectionEnd = control.value.length; } \ No newline at end of file Modified: trunk/server/webServer2/WebContent/secured/userrel/listOfUsers.xhtml =================================================================== --- trunk/server/webServer2/WebContent/secured/userrel/listOfUsers.xhtml 2010-02-18 16:55:15 UTC (rev 1783) +++ trunk/server/webServer2/WebContent/secured/userrel/listOfUsers.xhtml 2010-02-18 17:02:56 UTC (rev 1784) @@ -1,127 +1,163 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";> <html xmlns="http://www.w3.org/1999/xhtml"; - xmlns:h="http://java.sun.com/jsf/html"; - xmlns:f="http://java.sun.com/jsf/core"; - xmlns:ui="http://java.sun.com/jsf/facelets"; + xmlns:h="http://java.sun.com/jsf/html"; + xmlns:f="http://java.sun.com/jsf/core"; + xmlns:ui="http://java.sun.com/jsf/facelets"; xmlns:a4j="http://richfaces.org/a4j"; xmlns:rich="http://richfaces.org/rich";> <ui:composition template="/template/elvys-template.xhtml"> -<ui:define name="title">#{lbl['user.list.title']}</ui:define> -<ui:define name="contentTitle">#{lbl['user.list.body.title']}</ui:define> -<ui:define name="contentSubTitle"></ui:define> + <ui:define name="title">#{lbl['user.list.title']}</ui:define> + <ui:define name="contentTitle">#{lbl['user.list.body.title']}</ui:define> + <ui:define name="contentSubTitle"></ui:define> -<ui:define name="contentBody"> - <h:form> - <rich:panel id="listOfUsersPanel"> - <f:facet name="header">#{lbl['user.list.body.title']}</f:facet> - <h:panelGrid id="listOfUsers"> - <rich:dataTable value="#{usersBean.users}" var="user_iterator" rows="10" - width="600" reRender="datascroller" sortMode="multi"> - <h:column> - <f:facet name="header">#{lbl['user.list.body.id']}</f:facet> - <h:outputText value="#{user_iterator.id}"/> - </h:column> - <h:column> - <f:facet name="header">#{lbl['user.list.body.company']}</f:facet> - <h:outputText value="#{user_iterator.company.name}"/> - </h:column> - - <rich:column sortBy="#{user_iterator.surname}"> - <f:facet name="header">#{lbl['user.list.body.surname']}</f:facet> - <h:outputText value="#{user_iterator.surname}"/> - </rich:column> - - <rich:column sortBy="#{user_iterator.realname}"> - <f:facet name="header">#{lbl['user.list.body.firstname']}</f:facet> - <h:outputText value="#{user_iterator.realname}"/> - </rich:column> - <h:column> - <f:facet name="header">#{lbl['user.list.body.role']}</f:facet> - <h:outputText value="#{user_iterator.role.role}"/> - </h:column> - <h:column> - <f:facet name="header">#{lbl['user.list.body.username']}</f:facet> - <h:outputText value="#{user_iterator.username}"/> - </h:column> - - <!-- EDIT/UPDATE --> - <h:column> - <f:facet name="header">#{lbl['user.list.body.edit']}</f:facet> - <a4j:commandButton id="EditUser" - image="/images/icons/edit.png" - action="#{usersBean.prepareUpdateUserForm}"> - <f:setPropertyActionListener value="#{user_iterator}" target="#{usersBean.selectedUser}" /> - <f:setPropertyActionListener value="${true}" target="#{usersBean.updating}" /> - </a4j:commandButton> - <rich:toolTip for="EditUser"> - <h:outputText value="#{lbl['user.list.body.edit.tooltip']}"/> - </rich:toolTip> - </h:column> - - <!-- DELETE --> - <h:column> - <f:facet name="header">#{lbl['user.list.body.delete']}</f:facet> - <a4j:commandButton id="DeleteUser" - rendered="#{user.user.id!=user_iterator.id and !user_iterator.system}" - reRender="DeleteUserModalContent" - oncomplete="Richfaces.showModalPanel('DeleteUserModal',{left:300, top:300})" - image="/images/icons/delete.gif"> - <f:setPropertyActionListener value="#{user_iterator}" target="#{usersBean.selectedUser}" /> - </a4j:commandButton> - <rich:toolTip for="DeleteUser"> - <h:outputText value="#{lbl['user.list.body.delete.tooltip']}"/> - </rich:toolTip> - </h:column> - - <!-- CREATE --> - <h:column> + <ui:define name="contentBody"> + <h:form> + <rich:panel id="listOfUsersPanel"> + <f:facet name="header">#{lbl['user.list.body.title']}</f:facet> + <h:panelGrid id="listOfUsers"> + <rich:extendedDataTable value="#{usersBean.users}" + var="user_iterator" rows="10" height="364px;" + enableContextMenu="false" id="tableListOfUsers" + reRender="datascroller" sortMode="single" + noDataLabel="#{lbl['list.empty']}" + width="#{(6+(user.user.system?1:0))*110}px" + align="center" + > + <f:facet name="header"> - <h:panelGroup> - <a4j:commandButton id="CreateNewUser" - image="/images/icons/create.png" - action="#{usersBean.prepareCreateUserForm}"> - <f:setPropertyActionListener value="${false}" target="#{usersBean.updating}" /> - </a4j:commandButton> - <rich:toolTip for="CreateNewUser"> - <h:outputText value="#{lbl['user.list.body.create.tooltip']}"/> - </rich:toolTip> - </h:panelGroup> - </f:facet> - </h:column> - <f:facet name="footer"> - <rich:datascroller id="datascroller" renderIfSinglePage="false" immediate="true"/> - </f:facet> - </rich:dataTable> - </h:panelGrid> - </rich:panel> - </h:form> + <rich:columnGroup> + <rich:column colspan="#{6+(user.user.system?1:0)}"> + <div class="controlPanel"> + <h:panelGroup> + <a4j:commandButton id="CreateNewUser" + image="/images/icons/create.png" + action="#{userEditBean.prepareCreateUserForm}"> + <f:setPropertyActionListener value="${false}" + target="#{userEditBean.updating}" /> + </a4j:commandButton> + <rich:toolTip for="CreateNewUser"> + <h:outputText value="#{lbl['user.list.body.create.tooltip']}" /> + </rich:toolTip> + </h:panelGroup> + </div> + <div class="searchPanel"> + #{lbl['list.search']} : + <h:inputText value="#{usersBean.filterValue}" id="input"> + <a4j:support event="onkeyup" reRender="listOfUsers" + ignoreDupResponses="true" requestDelay="700" + oncomplete="setCaretToEnd(event);" /> + </h:inputText> + </div> + </rich:column> + </rich:columnGroup> + </f:facet> + + <rich:column sortBy="#{user_iterator.company.name}" width="110px" + rendered="#{user.user.system}"> + <f:facet name="header"> + #{lbl['user.list.body.company']} + </f:facet> + <h:outputText value="#{user_iterator.company.name}" /> + </rich:column> + + <rich:column width="140px" + filterMethod="#{usersBean.filterByValue}" + sortBy="#{user_iterator.surname}"> + <f:facet name="header">#{lbl['user.list.body.firstname']}</f:facet> + <h:outputText value="#{user_iterator.surname} #{user_iterator.realname}" /> + </rich:column> + + <rich:column width="60px" sortBy="#{user_iterator.role.role}"> + <f:facet name="header">#{lbl['user.list.body.role']}</f:facet> + <h:outputText value="#{user_iterator.role.role}" /> + </rich:column> + <rich:column width="100px" sortBy="#{user_iterator.username}"> + <f:facet name="header">#{lbl['user.list.body.username']}</f:facet> + <h:outputText value="#{user_iterator.username}" /> + </rich:column> + + <rich:column width="180px" sortBy="#{user_iterator.email}"> + <f:facet name="header">#{lbl['user.list.body.email']}</f:facet> + <h:outputText value="#{user_iterator.email}" /> + </rich:column> + + <rich:column width="90px" sortBy="#{user_iterator.phone}"> + <f:facet name="header">#{lbl['user.list.body.phone']}</f:facet> + <h:outputText value="#{user_iterator.phone}" /> + </rich:column> + + <rich:column width="90px"> + <f:facet name="header">#{lbl['user.list.body.edit']}</f:facet> + <div class="list-operations-main"> + <div class="list-operations-item"> + <a4j:commandButton id="EditUser" image="/images/icons/edit.png" + action="#{userEditBean.prepareUpdateUserForm}"> + <f:setPropertyActionListener value="#{user_iterator}" + target="#{userEditBean.selectedUser}" /> + <f:setPropertyActionListener value="${true}" + target="#{userEditBean.updating}" /> + </a4j:commandButton> + <rich:toolTip for="EditUser" direction="bottom-left"> + <h:outputText value="#{lbl['user.list.body.edit.tooltip']}" /> + </rich:toolTip> + </div> + <!-- DELETE --> - <rich:modalPanel id="DeleteUserModal" minHeight="100" minWidth="200" - height="150" width="200" zindex="2000"> - <center> - <h:form id="DeleteUserModalContent"> - <b><h:outputText>#{lbl['user.list.body.delete.tooltip.question']}</h:outputText></b> - <br/> - <h:outputText value="#{usersBean.selectedUser.surname}:"/> - <br/> - <h:panelGrid columns="2"> - <a4j:commandButton value="#{lbl['user.list.body.delete.tooltip.yes']}" - onclick="Richfaces.hideModalPanel('DeleteUserModal')" - actionListener="#{usersBean.deleteUser}" - reRender="listOfUsers"> - </a4j:commandButton> - <a4j:commandButton value="#{lbl['user.list.body.delete.tooltip.no']}" - onclick="Richfaces.hideModalPanel('DeleteUserModal')" - reRender="listOfUsers"/> - </h:panelGrid> + <div class="list-operations-item"> + <a4j:commandButton id="DeleteUser" + rendered="#{user.user.id!=user_iterator.id and !user_iterator.system}" + reRender="DeleteUserModalContent" + oncomplete="Richfaces.showModalPanel('DeleteUserModal',{left:300, top:300})" + image="/images/icons/delete.gif"> + <f:setPropertyActionListener value="#{user_iterator}" + target="#{usersBean.selectedUser}" /> + </a4j:commandButton> + <rich:toolTip for="DeleteUser" direction="bottom-left"> + <h:outputText value="#{lbl['user.list.body.delete.tooltip']}" /> + </rich:toolTip> + </div> + </div> + </rich:column> + + + + + <f:facet name="footer"> + <rich:datascroller id="datascroller" renderIfSinglePage="false" + immediate="true" /> + </f:facet> + </rich:extendedDataTable> + + </h:panelGrid> + </rich:panel> </h:form> - </center> - </rich:modalPanel> -</ui:define> + <rich:modalPanel id="DeleteUserModal" minHeight="100" minWidth="200" + height="150" width="200" zindex="2000"> + <center><h:form id="DeleteUserModalContent"> + <b><h:outputText>#{lbl['user.list.body.delete.tooltip.question']}</h:outputText></b> + <br /> + <h:outputText value="#{usersBean.selectedUser.surname}:" /> + <br /> + <h:panelGrid columns="2"> + <a4j:commandButton + value="#{lbl['user.list.body.delete.tooltip.yes']}" + onclick="Richfaces.hideModalPanel('DeleteUserModal')" + actionListener="#{usersBean.deleteUser}" reRender="listOfUsers"> + </a4j:commandButton> + <a4j:commandButton + value="#{lbl['user.list.body.delete.tooltip.no']}" + onclick="Richfaces.hideModalPanel('DeleteUserModal')" + reRender="listOfUsers" /> + </h:panelGrid> + </h:form></center> + </rich:modalPanel> + </ui:define> + + </ui:composition> -</html> +</html> Modified: trunk/server/webServer2/WebContent/styles/elvys-template.css =================================================================== --- trunk/server/webServer2/WebContent/styles/elvys-template.css 2010-02-18 16:55:15 UTC (rev 1783) +++ trunk/server/webServer2/WebContent/styles/elvys-template.css 2010-02-18 17:02:56 UTC (rev 1784) @@ -106,8 +106,30 @@ text-align: right; } .list-operations-item { - margin-right: 5px; + margin-right:15px; + width:10px; + float:right; +} + +div.searchPanel { + float:right; + width:250px; + text-align:right; +} + +div.searchPanel input { + padding-left:3px; +} + +div.controlPanel { + float:left; +} +div.controlPanel input { + padding:0px; + border:1px solid #A4D800; } + +