Add the general user properties page. Settings are visible but cannot be changed...
[reactos.git] / reactos / dll / cpl / usrmgr / userprops.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS User Manager Control Panel
4 * FILE: dll/cpl/usrmgr/users.c
5 * PURPOSE: Users property page
6 *
7 * PROGRAMMERS: Eric Kohl
8 */
9
10 #include "usrmgr.h"
11
12 static VOID
13 UpdateUserOptions(HWND hwndDlg,
14 PUSER_INFO_3 userInfo,
15 BOOL bInit)
16 {
17 EnableWindow(GetDlgItem(hwndDlg, IDC_USER_GENERAL_CANNOT_CHANGE),
18 !userInfo->usri3_password_expired);
19 EnableWindow(GetDlgItem(hwndDlg, IDC_USER_GENERAL_NEVER_EXPIRES),
20 !userInfo->usri3_password_expired);
21 EnableWindow(GetDlgItem(hwndDlg, IDC_USER_GENERAL_FORCE_CHANGE),
22 (userInfo->usri3_flags & (UF_PASSWD_CANT_CHANGE | UF_DONT_EXPIRE_PASSWD)) == 0);
23
24 if (bInit)
25 {
26 CheckDlgButton(hwndDlg, IDC_USER_GENERAL_FORCE_CHANGE,
27 userInfo->usri3_password_expired ? BST_CHECKED : BST_UNCHECKED);
28
29 CheckDlgButton(hwndDlg, IDC_USER_GENERAL_CANNOT_CHANGE,
30 (userInfo->usri3_flags & UF_PASSWD_CANT_CHANGE) ? BST_CHECKED : BST_UNCHECKED);
31
32 CheckDlgButton(hwndDlg, IDC_USER_GENERAL_NEVER_EXPIRES,
33 (userInfo->usri3_flags & UF_DONT_EXPIRE_PASSWD) ? BST_CHECKED : BST_UNCHECKED);
34
35 CheckDlgButton(hwndDlg, IDC_USER_GENERAL_DISABLED,
36 (userInfo->usri3_flags & UF_ACCOUNTDISABLE) ? BST_CHECKED : BST_UNCHECKED);
37 }
38 }
39
40
41 static VOID
42 GetUserData(HWND hwndDlg, LPTSTR lpUserName, PUSER_INFO_3 *usrInfo)
43 {
44 PUSER_INFO_3 userInfo = NULL;
45
46 SetDlgItemText(hwndDlg, IDC_USER_GENERAL_NAME, lpUserName);
47
48 NetUserGetInfo(NULL, lpUserName, 3, (LPBYTE*)&userInfo);
49
50 SetDlgItemText(hwndDlg, IDC_USER_GENERAL_FULL_NAME, userInfo->usri3_full_name);
51 SetDlgItemText(hwndDlg, IDC_USER_GENERAL_DESCRIPTION, userInfo->usri3_comment);
52
53 UpdateUserOptions(hwndDlg, userInfo, TRUE);
54
55 *usrInfo = userInfo;
56 }
57
58
59 INT_PTR CALLBACK
60 UserGeneralPageProc(HWND hwndDlg,
61 UINT uMsg,
62 WPARAM wParam,
63 LPARAM lParam)
64 {
65 PUSER_INFO_3 userInfo;
66
67 UNREFERENCED_PARAMETER(lParam);
68 UNREFERENCED_PARAMETER(wParam);
69 UNREFERENCED_PARAMETER(hwndDlg);
70
71 userInfo = (PUSER_INFO_3)GetWindowLongPtr(hwndDlg, DWLP_USER);
72
73 switch (uMsg)
74 {
75 case WM_INITDIALOG:
76 GetUserData(hwndDlg,
77 (LPTSTR)((PROPSHEETPAGE *)lParam)->lParam,
78 &userInfo);
79 SetWindowLongPtr(hwndDlg, DWLP_USER, (INT_PTR)userInfo);
80 break;
81
82 case WM_COMMAND:
83 switch (LOWORD(wParam))
84 {
85 case IDC_USER_GENERAL_FORCE_CHANGE:
86 userInfo->usri3_password_expired = !userInfo->usri3_password_expired;
87 UpdateUserOptions(hwndDlg, userInfo, FALSE);
88 break;
89
90 case IDC_USER_GENERAL_CANNOT_CHANGE:
91 userInfo->usri3_flags ^= UF_PASSWD_CANT_CHANGE;
92 UpdateUserOptions(hwndDlg, userInfo, FALSE);
93 break;
94
95 case IDC_USER_GENERAL_NEVER_EXPIRES:
96 userInfo->usri3_flags ^= UF_DONT_EXPIRE_PASSWD;
97 UpdateUserOptions(hwndDlg, userInfo, FALSE);
98 break;
99
100 case IDC_USER_GENERAL_DISABLED:
101 userInfo->usri3_flags ^= UF_ACCOUNTDISABLE;
102 break;
103
104 case IDC_USER_GENERAL_LOCKED:
105 break;
106 }
107 break;
108
109 case WM_DESTROY:
110 NetApiBufferFree(userInfo);
111 break;
112 }
113
114 return FALSE;
115 }
116
117
118 static VOID
119 InitPropSheetPage(PROPSHEETPAGE *psp, WORD idDlg, DLGPROC DlgProc, LPTSTR pszUser)
120 {
121 ZeroMemory(psp, sizeof(PROPSHEETPAGE));
122 psp->dwSize = sizeof(PROPSHEETPAGE);
123 psp->dwFlags = PSP_DEFAULT;
124 psp->hInstance = hApplet;
125 psp->pszTemplate = MAKEINTRESOURCE(idDlg);
126 psp->pfnDlgProc = DlgProc;
127 psp->lParam = (LPARAM)pszUser;
128 }
129
130
131 VOID
132 UserProperties(HWND hwndDlg)
133 {
134 PROPSHEETPAGE psp[1];
135 PROPSHEETHEADER psh;
136 TCHAR szUserName[UNLEN];
137 INT nItem;
138 HWND hwndLV;
139
140 hwndLV = GetDlgItem(hwndDlg, IDC_USERS_LIST);
141 nItem = ListView_GetNextItem(hwndLV, -1, LVNI_SELECTED);
142 if (nItem == -1)
143 return;
144
145 /* Get the new user name */
146 ListView_GetItemText(hwndLV,
147 nItem, 0,
148 szUserName,
149 UNLEN);
150
151 ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
152 psh.dwSize = sizeof(PROPSHEETHEADER);
153 psh.dwFlags = PSH_PROPSHEETPAGE | PSH_PROPTITLE;
154 psh.hwndParent = hwndDlg;
155 psh.hInstance = hApplet;
156 psh.hIcon = NULL;
157 psh.pszCaption = szUserName;
158 psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
159 psh.nStartPage = 0;
160 psh.ppsp = psp;
161
162 InitPropSheetPage(&psp[0], IDD_USER_GENERAL, (DLGPROC)UserGeneralPageProc, szUserName);
163 // InitPropSheetPage(&psp[1], IDD_USER_MEMBERSHIP, (DLGPROC)UserMembershipPageProc);
164 // InitPropSheetPage(&psp[2], IDD_USER_PROFILE, (DLGPROC)UserProfilePageProc);
165
166 PropertySheet(&psh);
167 }