-------------------------------- FILE Locations -------------------------------- * herhangi bir action icin action file current module'un /an folder'i icinde olacak * action icin olan field definition file perm cache folder icinide (i.e bu action'in kullanacagi definition file'i dinamik olarak modify edilen bir dosya oldugundan browser tarafindan yazilabilen bir yerde olmasi gerekiyor) * action definition file bulunurken once school_cache_perm icinde o okul icin olan folder'da araniyor, okul specific bir file yoksa genel file kullaniliyor yani: SCHOOL_CACHE_PERM/okul_ismi/an/viewdefs/modules/CurrrentModule/xxxxx_AN_defs.php file varsa bu kullaniliyor, yoksa SCHOOL_CACHE_PERM/an/viewdefs/modules/CurrrentModule/xxxxx_AN_defs.php * action icin button definition file, okul icin custom file varsa SCHOOLCUSTOM/school_name/modules/CurrentMOdule/an/view/xxxx_AN_btns.php file seklinde olacak yoksa default file root'taki /an folderindan kulaniliyor ------------------------------------------ DB ye Field ve Index'lerin otomatik eklenmesi ------------------------------------------- vardef var definition notes * "source" tanimli degilse veya "db" ise db field olusturuluyor. Tanimli ve "db" den farkli birseyse olusturulmuyor * db field type: su siraya gore bakiliyor, "dbType", "dbtype", "type", "Type" (ilk bulunan deger db type olarak kullaniliyor) en son bir kezde asagidaki mapping yapiliyor $map = array( 'int' => 'int' , 'double' => 'double' , 'float' => 'float' , 'uint' => 'int unsigned' , 'ulong' => 'bigint unsigned' , 'long' => 'bigint' , 'short' => 'smallint' , 'varchar' => 'varchar' , 'text' => 'text' , 'date' => 'date' , 'enum' => 'varchar' , 'datetime' => 'datetime' , 'time' => 'time' , 'bool' => 'bool' , 'tinyint' => 'tinyint' , 'char' => 'char' , 'blob' => 'blob' , 'decimal' => 'decimal' , 'id' => 'char(36)' 'varchar' or 'char' or 'varchar2' type'lari icin eger "len" tanimli ise o db field icin "length" olarak kullaniliyor, yoksa default 255 oluyor 'int' icinde "len" tanimliysa kullaniliyor, degilse hicbirsey set edilmiyor (mu durumda mysql default kullaniliyor olmasi lazim) 'decimal' ve 'float' icin "len" tanimliysa ve icerisinde bir tane "," varsa kullaniliyor, aksi halde hic bir length settingi olmuyor "default" tanimli ise bu field default value olarak kullaniliyor, bool db type icin default yoksa bile 0 olarak set ediliyor "required" true olan field'lar icin " NOT NULL " ekleniyor (field name "id" ise NOT NULL always) * FIELD'lar: once gecici olarak repair_table adinda bir table olusturuluyor field definitionlar kullanilarak sonra bu table fieldlari ile eger daha once bir table mevcut ise onun field'lari karsilastiriliyor bir field eksikse o zaman ekleniyor, farkli ise su anki programda hicbirsey yapmiyor. Degisenler veya table'da olupta definition'da olmayanlar varsa dokunulmuyor, manual olacak * INDEX'ler: field icin olan seyler Index icinde gecerli. Field ile birlikte index eklemekte mumkun "indices_AN" arrayi kullanilacak. Onceki "indices" arrayi eski data oldugu icin ve cok fazla yerde bulundugu icin kod "indices_AN" arrayini kullanacak sekilde degistirildi Index'lerde ayni sekilde yoksa ekleniyor. Degisenler veya table'da olupta definition'da olmayanlar varsa dokunulmuyor, manual olacak * audited_AN: vardef taniminida tepede audited_AN=1 ve audit edilecek her bir field taniminada yine audited_AN=1 eklenmesi gerekiyor * VERTICAL PARTITION icin: vardef tepede "subtables=2" seklinde ilave tablel sayisi olacak. Tanimli degilse ek table yok demek. Herhangi bir field ana table disinda ek table'larin birine gidecekse "subtable=1" veya "subtable=2" seklinde vardef icinde tanimlanacak Save icinde buna gore hangi field hangi table'a gidecek anlasilacak. Ayni sekilde table repair kanri tool'u icinde subtable'lar eksikse olusturulup, repair edilmesi gerekiyorsa repair edilecek, Ornek $GLOBALS['dictionary']['Student']['subtables']=2; // 2 subtables (excluding main table, in this case "contacts" table) $GLOBALS['dictionary']['Student']['fields']['first_name_furigana']['subtable']=1; // 1st subtable $GLOBALS['dictionary']['Student']['fields']['last_name_furigana']['subtable']=2; // 2nd subtable Subtables: tablename_sub1, mesela contacts icin, contacts_sub1, contacts_sub2 seklinde olacak table'lari birbirine baglayan id'ler ana table'da id, subtable'larde id_sub1, id_sub2 seklinde olacak