3838use OCP \EventDispatcher \IEventDispatcher ;
3939use OCP \Group \Events \UserAddedEvent ;
4040use OCP \Group \Events \UserRemovedEvent ;
41+ use OCP \IDBConnection ;
42+ use OCP \IGroupManager ;
4143use OCP \ILogger ;
44+ use OCP \IUser ;
45+ use OCP \IUserManager ;
46+ use Psr \Log \LoggerInterface ;
4247
4348class UpdateGroups extends TimedJob {
4449 private $ groupsFromDB ;
4550
4651 /** @var Group_Proxy */
4752 private $ groupBackend ;
48-
49- public function __construct (Group_Proxy $ groupBackend ) {
53+ /** @var IEventDispatcher */
54+ private $ dispatcher ;
55+ /** @var IGroupManager */
56+ private $ groupManager ;
57+ /** @var IUserManager */
58+ private $ userManager ;
59+ /** @var LoggerInterface */
60+ private $ logger ;
61+ /** @var IDBConnection */
62+ private $ dbc ;
63+
64+ public function __construct (
65+ Group_Proxy $ groupBackend ,
66+ IEventDispatcher $ dispatcher ,
67+ IGroupManager $ groupManager ,
68+ IUserManager $ userManager ,
69+ LoggerInterface $ logger ,
70+ IDBConnection $ dbc
71+ ) {
5072 $ this ->interval = $ this ->getRefreshInterval ();
5173 $ this ->groupBackend = $ groupBackend ;
74+ $ this ->dispatcher = $ dispatcher ;
75+ $ this ->groupManager = $ groupManager ;
76+ $ this ->userManager = $ userManager ;
77+ $ this ->logger = $ logger ;
78+ $ this ->dbc = $ dbc ;
79+ }
80+
81+ /**
82+ * @return int
83+ */
84+ private function getRefreshInterval () {
85+ //defaults to every hour
86+ return \OC ::$ server ->getConfig ()->getAppValue ('user_ldap ' , 'bgjRefreshInterval ' , 3600 );
5287 }
5388
5489 /**
@@ -79,28 +114,35 @@ public function updateGroups() {
79114 }
80115
81116 /**
82- * @return int
117+ * @return array
83118 */
84- private function getRefreshInterval () {
85- //defaults to every hour
86- return \OC ::$ server ->getConfig ()->getAppValue ('user_ldap ' , 'bgjRefreshInterval ' , 3600 );
119+ private function getKnownGroups () {
120+ if (is_array ($ this ->groupsFromDB )) {
121+ $ this ->groupsFromDB ;
122+ }
123+ $ qb = $ this ->dbc ->getQueryBuilder ();
124+ $ qb ->select (['owncloudname ' , 'owncloudusers ' ])
125+ ->from ('ldap_group_members ' );
126+ $ result = $ qb ->execute ()->fetchAll ();
127+
128+ $ this ->groupsFromDB = [];
129+ foreach ($ result as $ dataset ) {
130+ $ this ->groupsFromDB [$ dataset ['owncloudname ' ]] = $ dataset ;
131+ }
132+
133+ return $ this ->groupsFromDB ;
87134 }
88135
89- /**
90- * @param string[] $groups
91- */
92- private function handleKnownGroups ($ groups ) {
93- /** @var IEventDispatcher $dispatcher */
94- $ dispatcher = \OC ::$ server ->query (IEventDispatcher::class);
95- $ groupManager = \OC ::$ server ->getGroupManager ();
96- $ userManager = \OC ::$ server ->getUserManager ();
136+ private function handleKnownGroups (array $ groups ) {
137+ $ this ->logger ->debug (
138+ 'bgJ "updateGroups" – Dealing with known Groups. ' ,
139+ ['app ' => 'user_ldap ' ]
140+ );
141+ $ qb = $ this ->dbc ->getQueryBuilder ();
142+ $ qb ->update ('ldap_group_members ' )
143+ ->set ('owncloudusers ' , $ qb ->createParameter ('members ' ))
144+ ->where ($ qb ->expr ()->eq ('owncloudname ' , $ qb ->createParameter ('groupId ' )));
97145
98- \OCP \Util::writeLog ('user_ldap ' , 'bgJ "updateGroups" – Dealing with known Groups. ' , ILogger::DEBUG );
99- $ query = \OC_DB ::prepare ('
100- UPDATE `*PREFIX*ldap_group_members`
101- SET `owncloudusers` = ?
102- WHERE `owncloudname` = ?
103- ' );
104146 if (!is_array ($ this ->groupsFromDB )) {
105147 $ this ->getKnownGroups ();
106148 }
@@ -109,30 +151,49 @@ private function handleKnownGroups($groups) {
109151 $ actualUsers = $ this ->groupBackend ->usersInGroup ($ group );
110152 $ hasChanged = false ;
111153
112- $ groupObject = $ groupManager ->get ($ group );
154+ $ groupObject = $ this -> groupManager ->get ($ group );
113155 foreach (array_diff ($ knownUsers , $ actualUsers ) as $ removedUser ) {
114- $ userObject = $ userManager ->get ($ removedUser );
115- $ dispatcher ->dispatchTyped (new UserRemovedEvent ($ groupObject , $ userObject ));
116- \OCP \Util::writeLog ('user_ldap ' ,
117- 'bgJ "updateGroups" – " ' .$ removedUser .'" removed from " ' .$ group .'". ' ,
118- ILogger::INFO );
156+ $ userObject = $ this ->userManager ->get ($ removedUser );
157+ if ($ userObject instanceof IUser) {
158+ $ this ->dispatcher ->dispatchTyped (new UserRemovedEvent ($ groupObject , $ userObject ));
159+ }
160+ $ this ->logger ->info (
161+ 'bgJ "updateGroups" – {user} removed from {group} ' ,
162+ [
163+ 'app ' => 'user_ldap ' ,
164+ 'user ' => $ removedUser ,
165+ 'group ' => $ group
166+ ]
167+ );
119168 $ hasChanged = true ;
120169 }
121170 foreach (array_diff ($ actualUsers , $ knownUsers ) as $ addedUser ) {
122- $ userObject = $ userManager ->get ($ addedUser );
123- $ dispatcher ->dispatchTyped (new UserAddedEvent ($ groupObject , $ userObject ));
124- \OCP \Util::writeLog ('user_ldap ' ,
125- 'bgJ "updateGroups" – " ' .$ addedUser .'" added to " ' .$ group .'". ' ,
126- ILogger::INFO );
171+ $ userObject = $ this ->userManager ->get ($ addedUser );
172+ if ($ userObject instanceof IUser) {
173+ $ this ->dispatcher ->dispatchTyped (new UserAddedEvent ($ groupObject , $ userObject ));
174+ }
175+ $ this ->logger ->info (
176+ 'bgJ "updateGroups" – {user} added to {group} ' ,
177+ [
178+ 'app ' => 'user_ldap ' ,
179+ 'user ' => $ addedUser ,
180+ 'group ' => $ group
181+ ]
182+ );
127183 $ hasChanged = true ;
128184 }
129185 if ($ hasChanged ) {
130- $ query ->execute ([serialize ($ actualUsers ), $ group ]);
186+ $ qb ->setParameters ([
187+ 'members ' => serialize ($ actualUsers ),
188+ 'groupId ' => $ group
189+ ]);
190+ $ qb ->execute ();
131191 }
132192 }
133- \ OCP \Util:: writeLog ( ' user_ldap ' ,
193+ $ this -> logger -> debug (
134194 'bgJ "updateGroups" – FINISHED dealing with known Groups. ' ,
135- ILogger::DEBUG );
195+ ['app ' => 'user_ldap ' ]
196+ );
136197 }
137198
138199 /**
@@ -147,7 +208,7 @@ private function handleCreatedGroups($createdGroups) {
147208 ' );
148209 foreach ($ createdGroups as $ createdGroup ) {
149210 \OCP \Util::writeLog ('user_ldap ' ,
150- 'bgJ "updateGroups" – new group " ' . $ createdGroup. '" found. ' ,
211+ 'bgJ "updateGroups" – new group " ' . $ createdGroup . '" found. ' ,
151212 ILogger::INFO );
152213 $ users = serialize ($ this ->groupBackend ->usersInGroup ($ createdGroup ));
153214 $ query ->execute ([$ createdGroup , $ users ]);
@@ -169,32 +230,12 @@ private function handleRemovedGroups($removedGroups) {
169230 ' );
170231 foreach ($ removedGroups as $ removedGroup ) {
171232 \OCP \Util::writeLog ('user_ldap ' ,
172- 'bgJ "updateGroups" – group " ' . $ removedGroup. '" was removed. ' ,
233+ 'bgJ "updateGroups" – group " ' . $ removedGroup . '" was removed. ' ,
173234 ILogger::INFO );
174235 $ query ->execute ([$ removedGroup ]);
175236 }
176237 \OCP \Util::writeLog ('user_ldap ' ,
177238 'bgJ "updateGroups" – FINISHED dealing with removed groups. ' ,
178239 ILogger::DEBUG );
179240 }
180-
181- /**
182- * @return array
183- */
184- private function getKnownGroups () {
185- if (is_array ($ this ->groupsFromDB )) {
186- $ this ->groupsFromDB ;
187- }
188- $ query = \OC_DB ::prepare ('
189- SELECT `owncloudname`, `owncloudusers`
190- FROM `*PREFIX*ldap_group_members`
191- ' );
192- $ result = $ query ->execute ()->fetchAll ();
193- $ this ->groupsFromDB = [];
194- foreach ($ result as $ dataset ) {
195- $ this ->groupsFromDB [$ dataset ['owncloudname ' ]] = $ dataset ;
196- }
197-
198- return $ this ->groupsFromDB ;
199- }
200241}
0 commit comments