1212 * This class is part of Ubiquity
1313 *
1414 * @author jcheron <[email protected] > 15- * @version 1.0.8
15+ * @version 1.0.9
1616 * @category ubiquity.dev
1717 *
1818 */
1919abstract class ModelsCreator {
2020
21+ private $ silent = false ;
22+
2123 protected $ config ;
2224
2325 protected $ tables = array ();
@@ -34,12 +36,13 @@ abstract protected function getPrimaryKeys($tableName);
3436
3537 abstract protected function getForeignKeys ($ tableName , $ pkName , $ dbName = null );
3638
37- protected function init ($ config , $ offset = 'default ' ) {
39+ protected function init (array $ config , string $ offset = 'default ' ) {
3840 $ this ->config = DAO ::getDbOffset ($ config , $ offset );
3941 }
4042
41- public function create ($ config , $ initCache = true , $ singleTable = null , $ offset = 'default ' , $ memberAccess = 'private ' ) {
42- $ engine =CacheManager::getAnnotationsEngineInstance ();
43+ public function create (array $ config , bool $ initCache = true , ?string $ singleTable = null , string $ offset = 'default ' , string $ memberAccess = 'private ' ) {
44+ \ob_start ();
45+ $ engine = CacheManager::getAnnotationsEngineInstance ();
4346 $ this ->init ($ config , $ offset );
4447 $ this ->memberAccess = $ memberAccess ;
4548 $ dirPostfix = '' ;
@@ -54,14 +57,14 @@ public function create($config, $initCache = true, $singleTable = null, $offset
5457 CacheManager::checkCache ($ config );
5558
5659 foreach ($ this ->tables as $ table ) {
57- $ class = new Model ($ engine ,$ table , $ config ['mvcNS ' ]['models ' ] . $ nsPostfix , $ memberAccess );
60+ $ class = new Model ($ engine , $ table , $ config ['mvcNS ' ]['models ' ] . $ nsPostfix , $ memberAccess );
5861 $ class ->setDatabase ($ offset );
5962
6063 $ fieldsInfos = $ this ->getFieldsInfos ($ table );
6164 $ class ->setSimpleMembers (\array_keys ($ fieldsInfos ));
6265 $ keys = $ this ->getPrimaryKeys ($ table );
6366 foreach ($ fieldsInfos as $ field => $ info ) {
64- $ member = new Member ($ class ,$ engine ,$ field , $ memberAccess );
67+ $ member = new Member ($ class , $ engine , $ field , $ memberAccess );
6568 if (\in_array ($ field , $ keys )) {
6669 $ member ->setPrimary ();
6770 }
@@ -74,28 +77,33 @@ public function create($config, $initCache = true, $singleTable = null, $offset
7477 $ this ->classes [$ table ] = $ class ;
7578 }
7679 $ this ->createRelations ();
77-
80+
7881 if (isset ($ singleTable )) {
7982 $ this ->createOneClass ($ singleTable , $ modelsDir );
8083 } else {
8184 foreach ($ this ->classes as $ table => $ class ) {
8285 $ name = $ class ->getSimpleName ();
8386 echo "Creating the {$ name } class \n" ;
84- $ classContent= $ class ->__toString ();
87+ $ classContent = $ class ->__toString ();
8588 $ this ->writeFile ($ modelsDir . \DS . $ name . '.php ' , $ classContent );
8689 }
8790 }
8891 if ($ initCache === true ) {
89- CacheManager::initCache ($ config , 'models ' );
92+ CacheManager::initCache ($ config , 'models ' , $ this -> silent );
9093 }
9194 }
95+ $ r = \ob_get_clean ();
96+ if ($ this ->silent ) {
97+ return $ r ;
98+ }
99+ echo $ r ;
92100 }
93101
94- protected function createOneClass ($ singleTable , $ modelsDir ) {
102+ protected function createOneClass (string $ singleTable , string $ modelsDir ) {
95103 if (isset ($ this ->classes [$ singleTable ])) {
96104 $ class = $ this ->classes [$ singleTable ];
97105 echo "Creating the {$ class ->getName ()} class \n" ;
98- $ classContent= $ class ->__toString ();
106+ $ classContent = $ class ->__toString ();
99107 $ this ->writeFile ($ modelsDir . \DS . $ class ->getSimpleName () . '.php ' , $ classContent );
100108 } else {
101109 echo "The {$ singleTable } table does not exist in the database \n" ;
@@ -110,30 +118,30 @@ protected function createRelations() {
110118 foreach ($ fks as $ fk ) {
111119 $ field = \lcfirst ($ table );
112120 $ fkTable = $ fk ['TABLE_NAME ' ];
113- $ this ->classes [$ table ]->addOneToMany (\lcfirst ($ fkTable ) . 's ' , \lcfirst ($ table ), $ this ->classes [$ fkTable ]->getName (), $ this ->getAlternateName ($ fk ['COLUMN_NAME ' ], $ fk ['REFERENCED_COLUMN_NAME ' ]?? $ field ) . 's ' );
114- $ this ->classes [$ fkTable ]->addManyToOne ($ field , \lcfirst ($ fk ['COLUMN_NAME ' ]), $ class ->getName (), $ this ->getAlternateName ($ fk ['COLUMN_NAME ' ], $ fk ['REFERENCED_COLUMN_NAME ' ]?? $ field ));
121+ $ this ->classes [$ table ]->addOneToMany (\lcfirst ($ fkTable ) . 's ' , \lcfirst ($ table ), $ this ->classes [$ fkTable ]->getName (), $ this ->getAlternateName ($ fk ['COLUMN_NAME ' ], $ fk ['REFERENCED_COLUMN_NAME ' ] ?? $ field ) . 's ' );
122+ $ this ->classes [$ fkTable ]->addManyToOne ($ field , \lcfirst ($ fk ['COLUMN_NAME ' ]), $ class ->getName (), $ this ->getAlternateName ($ fk ['COLUMN_NAME ' ], $ fk ['REFERENCED_COLUMN_NAME ' ] ?? $ field ));
115123 }
116124 }
117125 }
118126 $ this ->createManyToMany ();
119127 }
120128
121- protected function getAlternateName ($ fkName , $ pkName ) {
122- $ alter= $ fkName ;
123- $ pkName= \ucfirst ($ pkName );
129+ protected function getAlternateName (string $ fkName , string $ pkName ): string {
130+ $ alter = $ fkName ;
131+ $ pkName = \ucfirst ($ pkName );
124132 if (\substr ($ fkName , 0 , \strlen ($ pkName )) == $ pkName ) {
125133 $ alter = \substr ($ fkName , \strlen ($ pkName ));
126134 }
127- $ needle_position = \strlen ($ pkName ) * -1 ;
128-
135+ $ needle_position = \strlen ($ pkName ) * - 1 ;
136+
129137 if (\substr ($ alter , $ needle_position ) == $ pkName ) {
130138 $ alter = \substr ($ alter , 0 , $ needle_position );
131139 }
132140 $ alter = \trim ($ alter , '_ ' );
133141 return \lcfirst ($ alter );
134142 }
135143
136- protected function getTableName ($ classname ) {
144+ protected function getTableName (string $ classname ): string {
137145 foreach ($ this ->classes as $ table => $ class ) {
138146 if ($ class ->getName () === $ classname ) {
139147 return $ table ;
@@ -155,20 +163,20 @@ protected function createManyToMany() {
155163 $ table2 = $ this ->getTableName ($ manyToOne2 ->className );
156164 $ class1 = $ this ->classes [$ table1 ];
157165 $ class2 = $ this ->classes [$ table2 ];
158- $ reflexive= ($ class1 ===$ class2 );
159- if ($ reflexive ){
160- $ table1Member= $ table2Member= $ table. 's ' ;
161- $ altName1= $ this ->getAlternateName ($ manyToOne2 ->name , \current ($ this ->getPrimaryKeys ($ table1 ))) . 's ' ;
162- }else {
166+ $ reflexive = ($ class1 === $ class2 );
167+ if ($ reflexive ) {
168+ $ table1Member = $ table2Member = $ table . 's ' ;
169+ $ altName1 = $ this ->getAlternateName ($ manyToOne2 ->name , \current ($ this ->getPrimaryKeys ($ table1 ))) . 's ' ;
170+ } else {
163171 $ table1Member = \lcfirst ($ table1 ) . 's ' ;
164172 $ table2Member = \lcfirst ($ table2 ) . 's ' ;
165- $ altName1= $ altName2= $ table. 's ' ;
173+ $ altName1 = $ altName2 = $ table . 's ' ;
166174 }
167175 $ joinTable1 = $ this ->getJoinTableArray ($ class1 , $ manyToOne1 );
168176 $ joinTable2 = $ this ->getJoinTableArray ($ class2 , $ manyToOne2 );
169177 $ class1 ->removeOneToManyMemberByClassAssociation ($ class ->getName ());
170178 $ class1 ->addManyToMany ($ table2Member , $ manyToOne2 ->className , $ table1Member , $ table , $ joinTable1 , $ joinTable2 , $ altName1 );
171- if (! $ reflexive ){
179+ if (! $ reflexive ) {
172180 $ class2 ->removeOneToManyMemberByClassAssociation ($ class ->getName ());
173181 $ class2 ->addManyToMany ($ table1Member , $ manyToOne1 ->className , $ table2Member , $ table , $ joinTable2 , $ joinTable1 , $ altName2 );
174182 }
@@ -192,7 +200,15 @@ protected function getJoinTableArray(Model $class, object $joinColumn) {
192200 return [];
193201 }
194202
195- protected function writeFile ($ filename , $ data ) {
203+ protected function writeFile (string $ filename , string $ data ): int {
196204 return \file_put_contents ($ filename , $ data );
197205 }
206+
207+ /**
208+ *
209+ * @param boolean $silent
210+ */
211+ public function setSilent (bool $ silent ): void {
212+ $ this ->silent = $ silent ;
213+ }
198214}
0 commit comments