1515 * GNU General Public License for more details.
1616 */
1717
18- use TYPO3 \CMS \Backend \Utility \BackendUtility ;
19- use TYPO3 \CMS \Core \Database \DatabaseConnection ;
18+ use TYPO3 \CMS \Core \Database \ConnectionPool ;
19+ use TYPO3 \CMS \Core \Database \Query \QueryBuilder ;
20+ use TYPO3 \CMS \Core \Database \Query \Restriction \DeletedRestriction ;
2021use TYPO3 \CMS \Core \Resource \Exception \FileDoesNotExistException ;
2122use TYPO3 \CMS \Core \Resource \File ;
2223use TYPO3 \CMS \Core \Resource \ResourceFactory ;
24+ use TYPO3 \CMS \Core \Utility \GeneralUtility ;
2325
2426/**
2527 * Class UserRepository
2628 */
2729class UserRepository
2830{
2931 /**
30- * @var DatabaseConnection
32+ * @var ConnectionPool
3133 */
32- protected $ connection = null ;
34+ protected $ connectionPool ;
3335
3436 /**
3537 * @var array
@@ -59,7 +61,7 @@ class UserRepository
5961 */
6062 public function __construct ()
6163 {
62- $ this ->connection = $ GLOBALS [ ' TYPO3_DB ' ] ;
64+ $ this ->connectionPool = GeneralUtility:: makeInstance (ConnectionPool::class) ;
6365 }
6466
6567 /**
@@ -69,16 +71,40 @@ public function __construct()
6971 */
7072 public function getUserState ($ user )
7173 {
72- $ where = 'username = ' . $ this ->connection ->fullQuoteStr ($ user , 'be_users ' );
73- $ whereActive = $ where . BackendUtility::deleteClause ('be_users ' ) . BackendUtility::BEenableFields ('be_users ' );
74+ $ queryBuilder = $ this ->getBeUserQueryBuilder ();
7475
75- if ($ this ->connection ->exec_SELECTcountRows ('* ' , 'be_users ' , $ whereActive )) {
76+ $ count = $ queryBuilder
77+ ->count ('* ' )
78+ ->from ('be_users ' )
79+ ->where ($ this ->getWhereForUserName ($ queryBuilder , $ user ))
80+ ->execute ()
81+ ->fetchColumn ();
82+
83+ /** @var DeletedRestriction $restriction */
84+ $ restriction = GeneralUtility::makeInstance (DeletedRestriction::class);
85+
86+ $ queryBuilder = $ this ->getBeUserQueryBuilder ();
87+
88+ $ queryBuilder
89+ ->getRestrictions ()
90+ ->removeAll ()
91+ ->add ($ restriction );
92+
93+ $ countActive = $ queryBuilder
94+ ->count ('* ' )
95+ ->from ('be_users ' )
96+ ->where ($ this ->getWhereForUserName ($ queryBuilder , $ user ))
97+ ->execute ()
98+ ->fetchColumn ();
99+
100+ if ($ countActive ) {
76101 return 'okay ' ;
77102 }
78103
79- if ($ this -> connection -> exec_SELECTcountRows ( ' * ' , ' be_users ' , $ where ) ) {
104+ if ($ count ) {
80105 return 'deleted ' ;
81106 }
107+
82108 return 'unknown ' ;
83109 }
84110
@@ -89,8 +115,30 @@ public function getUserState($user)
89115 */
90116 public function getUser ($ user )
91117 {
92- $ where = 'username = ' . $ this ->connection ->fullQuoteStr ($ user , 'be_users ' );
93- return $ this ->connection ->exec_SELECTgetSingleRow (implode (', ' , $ this ->fields ), 'be_users ' , $ where );
118+ $ queryBuilder = $ this ->getBeUserQueryBuilder ();
119+
120+ return $ queryBuilder
121+ ->select (...$ this ->fields )
122+ ->from ('be_users ' )
123+ ->where ($ this ->getWhereForUserName ($ queryBuilder , $ user ))
124+ ->execute ()
125+ ->fetch ();
126+ }
127+
128+ /**
129+ * @param $queryBuilder QueryBuilder
130+ * @param $userName
131+ * @return String
132+ */
133+ protected function getWhereForUserName ($ queryBuilder , $ userName )
134+ {
135+ $ queryBuilder
136+ ->getRestrictions ()
137+ ->removeAll ();
138+
139+ return $ queryBuilder
140+ ->expr ()
141+ ->eq ('username ' , $ queryBuilder ->createNamedParameter ($ userName ));
94142 }
95143
96144 /**
@@ -100,19 +148,45 @@ public function getUser($user)
100148 */
101149 public function getUserImage ($ user )
102150 {
103- $ sql = '
104- SELECT sys_file.* FROM sys_file
105- RIGHT JOIN sys_file_reference ON sys_file.uid = sys_file_reference.uid_local
106- RIGHT JOIN be_users ON sys_file_reference.uid_foreign = be_users.uid
107- WHERE be_users.username = ' . $ this ->connection ->fullQuoteStr ($ user , 'be_users ' ) . '
108- AND sys_file_reference.deleted = 0
109- AND sys_file_reference.tablenames = "be_users"
110- AND sys_file_reference.fieldname = "avatar" ' ;
111-
112- $ file = $ this ->connection ->admin_query ($ sql )->fetch_assoc ();
151+ /** @var QueryBuilder $queryBuilder */
152+ $ queryBuilder = $ this ->connectionPool ->getQueryBuilderForTable ('sys_file ' );
153+
154+ $ file = $ queryBuilder
155+ ->select ('sys_file.* ' )
156+ ->from ('sys_file ' )
157+ ->rightJoin (
158+ 'sys_file ' ,
159+ 'sys_file_reference ' ,
160+ 'sys_file_reference ' ,
161+ $ queryBuilder
162+ ->expr ()
163+ ->eq ('sys_file_reference.uid_local ' , $ queryBuilder ->quoteIdentifier ('sys_file.uid ' )))
164+ ->rightJoin (
165+ 'sys_file ' ,
166+ 'be_users ' ,
167+ 'be_users ' ,
168+ $ queryBuilder
169+ ->expr ()
170+ ->eq ('be_users.uid ' , $ queryBuilder ->quoteIdentifier ('sys_file_reference.uid_foreign ' )))
171+ ->where (
172+ $ queryBuilder
173+ ->expr ()
174+ ->eq ('be_users.username ' , $ queryBuilder ->createNamedParameter ($ user )))
175+ ->andWhere (
176+ $ queryBuilder
177+ ->expr ()
178+ ->eq ('sys_file_reference.tablenames ' , $ queryBuilder ->createNamedParameter ('be_users ' )))
179+ ->andWhere (
180+ $ queryBuilder
181+ ->expr ()
182+ ->eq ('sys_file_reference.fieldname ' , $ queryBuilder ->createNamedParameter ('avatar ' )))
183+ ->execute ()
184+ ->fetch ();
185+
113186 if (!empty ($ file ['uid ' ])) {
114187 try {
115188 $ resource = ResourceFactory::getInstance ()->getFileObject ($ file ['uid ' ], $ file );
189+
116190 if ($ resource instanceof File && $ resource ->exists ()) {
117191 return [
118192 'identifier ' => $ resource ->getName (),
@@ -122,6 +196,14 @@ public function getUserImage($user)
122196 } catch (FileDoesNotExistException $ e ) {
123197 }
124198 }
199+
125200 return null ;
126201 }
202+
203+ /**
204+ * @return QueryBuilder
205+ */
206+ private function getBeUserQueryBuilder () {
207+ return $ this ->connectionPool ->getQueryBuilderForTable ('be_users ' );
208+ }
127209}
0 commit comments