@@ -67,11 +67,18 @@ function loadSampleData()
6767 $ language = $ xoopsConfig ['language ' ] . '/ ' ;
6868 }
6969
70+ // load module tables
7071 foreach ($ tables as $ table ) {
7172 $ tabledata = \Xmf \Yaml::readWrapped ($ language . $ table . '.yml ' );
7273 \Xmf \Database \TableLoad::truncateTable ($ table );
7374 \Xmf \Database \TableLoad::loadTableFromArray ($ table , $ tabledata );
7475 }
76+
77+ // load permissions
78+ $ table = 'group_permission ' ;
79+ $ tabledata = \Xmf \Yaml::readWrapped ($ language . $ table . '.yml ' );
80+ $ mid = \Xmf \Module \Helper::getHelper ($ moduleDirName )->getModule ()->getVar ('mid ' );
81+ loadTableFromArrayWithReplace ($ table , $ tabledata , 'gperm_modid ' , $ mid );
7582
7683 // --- COPY test folder files ---------------
7784 if (is_array ($ configurator ->copyTestFolders ) && count ($ configurator ->copyTestFolders ) > 0 ) {
@@ -103,9 +110,17 @@ function saveSampleData()
103110 $ exportFolder = $ languageFolder . '/Exports- ' . date ('Y-m-d-H-i-s ' ) . '/ ' ;
104111 Utility::createFolder ($ exportFolder );
105112
113+ // save module tables
106114 foreach ($ tables as $ table ) {
107115 \Xmf \Database \TableLoad::saveTableToYamlFile ($ table , $ exportFolder . $ table . '.yml ' );
108116 }
117+
118+ // save permissions
119+ $ criteria = new \CriteriaCompo ();
120+ $ criteria ->add (new \Criteria ('gperm_modid ' , \Xmf \Module \Helper::getHelper ($ moduleDirName )->getModule ()->getVar ('mid ' )));
121+ $ skipColumns [] = 'gperm_id ' ;
122+ \Xmf \Database \TableLoad::saveTableToYamlFile ('group_permission ' , $ exportFolder . 'group_permission.yml ' , $ criteria , $ skipColumns );
123+ unset($ criteria );
109124
110125 // --- COPY test folder files ---------------
111126 if (is_array ($ configurator ->copyTestFolders ) && count ($ configurator ->copyTestFolders ) > 0 ) {
@@ -135,3 +150,58 @@ function exportSchema()
135150 }
136151
137152}
153+
154+ /**
155+ * loadTableFromArrayWithReplace
156+ *
157+ * @param string $table value with should be used insead of original value of $search
158+ *
159+ * @param array $data array of rows to insert
160+ * Each element of the outer array represents a single table row.
161+ * Each row is an associative array in 'column' => 'value' format.
162+ * @param string $search name of column for which the value should be replaced
163+ * @param $replace
164+ * @return int number of rows inserted
165+ */
166+ function loadTableFromArrayWithReplace ($ table , $ data , $ search , $ replace )
167+ {
168+ /** @var \XoopsDatabase */
169+ $ db = \XoopsDatabaseFactory::getDatabaseConnection ();
170+
171+ $ prefixedTable = $ db ->prefix ($ table );
172+ $ count = 0 ;
173+
174+ $ sql = 'DELETE FROM ' . $ prefixedTable . ' WHERE ` ' . $ search . '`= ' . $ db ->quote ($ replace );
175+
176+ $ result = $ db ->queryF ($ sql );
177+
178+ foreach ($ data as $ row ) {
179+ $ insertInto = 'INSERT INTO ' . $ prefixedTable . ' ( ' ;
180+ $ valueClause = ' VALUES ( ' ;
181+ $ first = true ;
182+ foreach ($ row as $ column => $ value ) {
183+ if ($ first ) {
184+ $ first = false ;
185+ } else {
186+ $ insertInto .= ', ' ;
187+ $ valueClause .= ', ' ;
188+ }
189+
190+ $ insertInto .= $ column ;
191+ if ($ search === $ column ) {
192+ $ valueClause .= $ db ->quote ($ replace );
193+ } else {
194+ $ valueClause .= $ db ->quote ($ value );
195+ }
196+ }
197+
198+ $ sql = $ insertInto . ') ' . $ valueClause . ') ' ;
199+
200+ $ result = $ db ->queryF ($ sql );
201+ if (false !== $ result ) {
202+ ++$ count ;
203+ }
204+ }
205+
206+ return $ count ;
207+ }
0 commit comments