77namespace OCA \Forms \Db ;
88
99use OCA \Forms \Constants ;
10+ use OCA \Forms \Service \ConfigService ;
1011use OCP \AppFramework \Db \Entity ;
1112use OCP \AppFramework \Db \QBMapper ;
1213use OCP \DB \QueryBuilder \IQueryBuilder ;
@@ -23,10 +24,11 @@ class FormMapper extends QBMapper {
2324 * @param IDBConnection $db
2425 */
2526 public function __construct (
27+ IDBConnection $ db ,
2628 private QuestionMapper $ questionMapper ,
2729 private ShareMapper $ shareMapper ,
2830 private SubmissionMapper $ submissionMapper ,
29- IDBConnection $ db ,
31+ private ConfigService $ configService ,
3032 ) {
3133 parent ::__construct ($ db , 'forms_v2_forms ' , Form::class);
3234 }
@@ -133,19 +135,23 @@ public function findSharedForms(string $userId, array $groups = [], array $teams
133135
134136 // build expression for publicly shared forms (default only directly shown)
135137 if ($ filterShown ) {
136- // Only shown
137- $ access = $ qbShares ->expr ()->in ('access_enum ' , $ qbShares ->createNamedParameter (Constants::FORM_ACCESS_ARRAY_SHOWN , IQueryBuilder::PARAM_INT_ARRAY , ':access_shown ' ));
138- } else {
138+ // Only shown forms
139+ if ($ this ->configService ->getAllowShowToAll ()) {
140+ $ access = $ qbShares ->expr ()->in ('access_enum ' , $ qbShares ->createNamedParameter (Constants::FORM_ACCESS_ARRAY_SHOWN , IQueryBuilder::PARAM_INT_ARRAY , ':access_shown ' ));
141+ }
142+ } elseif ($ this ->configService ->getAllowPermitAll ()) {
139143 // All
140144 $ access = $ qbShares ->expr ()->neq ('access_enum ' , $ qbShares ->createNamedParameter (Constants::FORM_ACCESS_NOPUBLICSHARE , IQueryBuilder::PARAM_INT , ':access_nopublicshare ' ));
141145 }
142146
147+ // Build the where clause for membership or public access
148+ $ memberOrPublic = isset ($ access ) ? $ qbShares ->expr ()->orX ($ memberships , $ access ) : $ memberships ;
149+
143150 // Select all DISTINCT IDs of shared forms
144151 $ qbShares ->selectDistinct ('forms.id ' )
145152 ->from ($ this ->getTableName (), 'forms ' )
146153 ->leftJoin ('forms ' , $ this ->shareMapper ->getTableName (), 'shares ' , $ qbShares ->expr ()->eq ('forms.id ' , 'shares.form_id ' ))
147- ->where ($ memberships )
148- ->orWhere ($ access )
154+ ->where ($ memberOrPublic )
149155 ->andWhere ($ qbShares ->expr ()->neq ('forms.owner_id ' , $ qbShares ->createNamedParameter ($ userId , IQueryBuilder::PARAM_STR , ':owner_id ' )));
150156
151157 // Select the whole forms for the DISTINCT shared forms IDs
0 commit comments