diff --git a/code/Company.php b/code/Company.php new file mode 100644 index 0000000..974c037 --- /dev/null +++ b/code/Company.php @@ -0,0 +1,295 @@ +'Varchar(255)', + 'Category'=>'Varchar(255)', + 'Revenue'=>'Float', + 'CEO'=>'Varchar(255)', + ); + + public static $has_one = array( + 'RelationFieldsTestPage' => 'RelationFieldsTestPage' + ); + + public static $has_many = array( + 'Employees' => 'Employee' + ); + + static $belongs_many_many = array( + 'RelationFieldsTestPages' => 'RelationFieldsTestPage' + ); + + public static $summary_fields = array('Name', 'Category', 'Revenue', 'CEO'); + + + public function getCMSFields($controller, $formName) { + $fields = new FieldList(); + $fields->add(new TextField('Name', 'Name', $this->Name)); + $fields->add(new TextField('Category', 'Category', $this->Category)); + $fields->add(new TextField('Revenue', 'Revenue', $this->Revenue)); + $fields->add(new TextField('CEO', 'CEO', $this->CEO)); + + $config = new GridFieldConfig(); + $config->addComponent(new GridFieldRelationAdd('Name')); + $config->addComponent(new GridFieldDefaultColumns()); + $config->addComponent(new GridFieldSortableHeader()); + $config->addComponent(new GridFieldPaginator()); + $config->addComponent(new GridFieldAction_Edit()); + $config->addComponent(new GridFieldRelationDelete()); + $config->addComponent(new GridFieldPopupForms()); + + $gridField = new GridField('Employees', 'Employees', $this->Employees(), $config); + $fields->add($gridField); + return $fields; + } + + public function requireDefaultRecords() { + parent::requireDefaultRecords(); + $companySet = DataObject::get('Company'); + foreach ($companySet as $company) { + $company->delete(); + } + + foreach($this->data() as $companyData){ + $company = new Company(); + $company->Name = $companyData[0]; + $company->Category = $companyData[1]; + $company->Revenue = $companyData[2]; + $company->CEO = $companyData[3]; + $company->write(); + } + DB::alteration_message("Added default records to Company table","created"); + } + + /** + * Contains test data + * + * @return array + */ + public function data() { + return array( + 0 => array("Walmart", "Retail", "421.849", "Michael Duke"), + 1 => array("ExxonMobil", "Oil and gas", "370.125", "Rex W. Tillerson"), + 2 => array("Royal Dutch Shell", "Oil and gas", "368.056", "Peter Voser"), + 3 => array("BP", "Oil and gas", "297.107", "Robert Dudley"), + 4 => array("Sinopec", "Oil and gas", "289.774", "Jiming Wang"), + 5 => array("State Grid Corporation of China", "Electricity", "231.556", "Liu Zhenya"), + 6 => array("Toyota Motors", "Automotive", "228.247", "Fujio Cho"), + 7 => array("PetroChina", "Oil and gas", "221.955", "Zhou Jiping"), + 8 => array("Total S.A.", "Oil and gas", "212.815", "Christophe de Margerie"), + 9 => array("Japan Post Holdings", "Conglomerate", "211.080", "Jiro Saito"), + 10 => array("Chevron", "Oil and gas", "204.928", "David J. O'Reilly"), + 11 => array("ConocoPhillips", "Oil and gas", "198.655", "James Mulva"), + 12 => array("Vitol", "Raw material", "195.0", "Ian Taylor"), + 13 => array("Saudi Aramco", "Oil and gas", "182.396", "Waleed Al-Bedaiwi"), + 14 => array("Volkswagen Group", "Automotive", "169.53", "Martin Winterkorn"), + 15 => array("Fannie Mae", "Financial services", "154.270", "Mike Williams"), + 16 => array("General Electric", "Conglomerate", "150.211", "Jeffrey Immelt"), + 17 => array("Glencore", "Raw materials", "144.978", "Ivan Glasenberg"), + 18 => array("Allianz", "Financial services", "142.24", "Michael Diekmann"), + 19 => array("ING Group", "Financial services", "140.729", "Jan Hommen"), + 20 => array("Berkshire Hathaway", "Conglomerate", "136.185", "Warren Buffett"), + 21 => array("Samsung Electronics", "Conglomerate", "135.772", "Lee Kun-hee"), + 22 => array("General Motors", "Automotive", "135.592", "Daniel Akerson"), + 23 => array("Eni", "Oil and gas", "131.292", "Paolo Scaroni"), + 24 => array("Daimler AG", "Automotive", "130.628", "Dieter Zetsche"), + 25 => array("Ford Motor Company", "Automotive", "128.954", "Alan Mulally"), + 26 => array("Hewlett-Packard", "Information technology", "127.245", "Meg Whitman"), + 27 => array("Nippon Telegraph and Telephone", "Telecommunications", "124.517", "Norio Wada"), + 28 => array("AT&T", "Telecommunications", "124.28", "Randall L. Stephenson"), + 29 => array("E.ON", "Electricity; gas", "124.084", "Johannes Teyssen"), + 30 => array("Carrefour", "Retailing", "122.280", "Lars Olofsson"), + 31 => array("AXA", "Financial services", "121.577", "Henri de Castries"), + 32 => array("Assicurazioni Generali", "Insurance", "121.299", "Sergio Balbinot, Giovanni Perissinotto"), + 33 => array("Petrobras", "Oil and gas", "120.052", "José Sérgio Gabrielli de Azevedo"), + 34 => array("Cargill", "Agriculture", "119.469", "Greg Page"), + 35 => array("JX Holdings", "Energy", "116.414", "-"), + 36 => array("GDF Suez", "Public utilities", "112.88", "Gérard Mestrallet"), + 37 => array("Hitachi, Ltd.", "Conglomerate", "112.239", "Etsuhiko Shoyama"), + 38 => array("McKesson Corporation", "Health care", "112.084", "John Hammergren"), + 39 => array("Gazprom", "Oil and Gas", "111.808", "Alexei Miller"), + 40 => array("Bank of America", "Banking", "111.39", "Brian Moynihan"), + 41 => array("Tesco", "Retailing", "110.85", "Philip Clarke"), + 42 => array("Federal Home Loan Mortgage Corporation", "Financial services", "109.956", "Richard F. Syron"), + 43 => array("Apple Inc.", "Electronics", "108.249", "Tim Cook"), + 44 => array("Honda", "Automotive", "107.985", "Takanobu Ito"), + 45 => array("Verizon", "Telecommunications", "106.565", "Ivan Seidenberg"), + 46 => array("Nissan Motors", "Automotive", "105.523", "Carlos Ghosn"), + 47 => array("Panasonic Corporation", "Electronics", "105.035", "Kunio Nakamura"), + 48 => array("Nestlé", "Food processing", "104.972", "Paul Bulcke"), + 49 => array("LUKoil", "Oil and Gas", "104.956", "Vagit Alekperov"), + 50 => array("Pemex", "Oil and gas", "103.538", "Juan José Suárez Coppel"), + 51 => array("JPMorgan Chase", "Financial Services", "102.694", "Jamie Dimon"), + 52 => array("Cardinal Health", "Health care", "102.644", "George Barrett"), + 53 => array("Koch Industries", "Conglomerate", "100.0", "Charles Koch"), + 54 => array("Petróleos de Venezuela", "Oil and gas", "94.929", "Rafael Ramírez"), + 55 => array("IBM", "Information technology", "99.87", "Virginia Rometty"), + 56 => array("Siemens AG", "Conglomerate", "98.870", "Peter Löscher"), + 57 => array("Hyundai Motors", "Automotive", "98.858", "Chung Mong-Koo"), + 58 => array("Enel", "Electricity generation", "97.782", "Fulvio Conti"), + 59 => array("CVS Caremark", "Retailing", "96.413", "Tom Ryan"), + 60 => array("Lloyds Banking Group", "Financial Services", "95.342", "António Horta-Osório"), + 61 => array("UnitedHealth Group", "Health care", "94.155", "Stephen Hemsley"), + 62 => array("Statoil", "Oil and gas", "90.733", "Helge Lund"), + 63 => array("Metro AG", "Retailing", "89.87", "Eckhard Cordes"), + 64 => array("Aviva", "Financial services", "89.890", "Andrew Moss"), + 65 => array("Electricité de France", "Electricity generation", "87.073", "Henri Proglio"), + 66 => array("Costco", "Retailing", "87.048", "Jim Sinegal"), + 67 => array("Citigroup", "Financial services", "86.601", "Vikram Pandit"), + 68 => array("Sony", "Electronics", "86.521", "Howard Stringer"), + 69 => array("BASF", "Chemical industry", "85.347", "Kurt Bock"), + 70 => array("Wells Fargo", "Banking / Financial services", "85.21", "John Stumpf"), + 71 => array("Société Générale", "Financial Services", "84.868", "Frédéric Oudéa"), + 72 => array("Kuwait Petroleum Corporation", "Oil and gas", "84.594", "Saad Al Shuwaib"), + 73 => array("Deutsche Telekom", "Telecommunications", "83.407", "René Obermann"), + 74 => array("Procter & Gamble", "Consumer goods", "82.559", "Robert A. \"Bob\" McDonald"), + 75 => array("Industrial and Commercial Bank of China", "Banking", "82.536", "Jiang Jianqing"), + 76 => array("Valero Energy", "Oil and gas", "82.233", "Bill Klesse"), + 77 => array("Kroger", "Retailing", "82.189", "David Dillon"), + 78 => array("Nippon Life Insurance", "Insurance", "81.315", "Kunie Okamoto"), + 79 => array("Telefónica", "Telecommunications", "80.938", "César Alierta"), + 80 => array("BMW", "Automotive", "80.809", "Norbert Reithofer"), + 81 => array("Repsol YPF", "Oil and Gas", "80.747", "Antonio Brufau"), + 82 => array("Archer Daniels Midland", "Agriculture, Food processing", "80.676", "Patricia A. Woertz"), + 83 => array("AmerisourceBergen", "Health care", "80.218", "R. David Yost"), + 84 => array("HSBC", "Financial services", "80.014", "Stuart Gulliver"), + 85 => array("SK Group", "Conglomerate", "79.603", "Choi Tae-Won"), + 86 => array("National Iranian Oil Company", "Oil and gas", "79.277", "Masoud Mir Kazemi"), + 87 => array("Trafigura", "Raw materials", "79.2", " ?"), + 88 => array("ArcelorMittal", "Steel", "78.025", "Lakshmi Mittal"), + 89 => array("American International Group", "Financial services", "77.301", "Robert Benmosche"), + 90 => array("Toshiba", "Conglomerate", "77.090", "Tadashi Okamura"), + 91 => array("Petronas", "Oil and gas", "76.822", "Tan Sri Dato Sri Mohd Hassan Marican"), + 92 => array("Indian Oil Corporation", "Oil and Gas", "75.632", "B.M.Bansal"), + 93 => array("Fiat", "Conglomerate", "75.172", "Sergio Marchionne"), + 94 => array("ZEN-NOH", "Agricultural marketing", "75.111", "Katsuyoshi Kitajima"), + 95 => array("PSA Peugeot Citroën", "Automotive", "74.909", "Philippe Varin"), + 96 => array("Vodafone", "Telecommunications", "73.635", "Vittorio Colao"), + 97 => array("Marathon Oil", "Oil and gas", "73.621", "Clarence Cazalot, Jr."), + 98 => array("China Mobile", "Telecommunications", "73.520", "Li Yue"), + 99 => array("Prudential plc", "Banking", "73.337", "Tidjane Thiam"), + 100 => array("Walgreens", "Retailing", "72.184", "Jeff Rein"), + 101 => array("Deutsche Post", "Courier", "71.751", "Frank Appel"), + 102 => array("BHP Billiton", "Mining", "71.739", "Marius Kloppers"), + 103 => array("RWE", "Public utilities", "71.246", "Jürgen Großmann"), + 104 => array("Aegon", "Insurance", "71.148", "Alex Wynaendts"), + 105 => array("REWE Group", "Retailing", "70.872", "Alain Caparros"), + 106 => array("Dexia", "Banking", "70.106", "Pierre Mariani"), + 107 => array("Microsoft", "Information technology", "69.943", "Steve Ballmer"), + 108 => array("China Railway Construction Corporation", "Infrastructure", "69.118", "Meng Fengchao"), + 109 => array("China Railway Engineering Corporation", "Infrastructure", "69.082", "Shi Dahua"), + 110 => array("Toyota Tsusho", "Sogo shosha", "69.076", "Masaaki Furukawa"), + 111 => array("China Construction Bank", "Banking", "68.777", "Guo Shuqing"), + 112 => array("Home Depot, Inc.", "Retailing", "67.997", "Frank Blake"), + 113 => array("Zurich Financial Services", "Insurance", "67.85", "Martin Senn"), + 114 => array("Pfizer", "Health care", "67.809", "Jeff Kindler"), + 115 => array("Philip Morris International", "Tobacco industry", "67.713", "Louis C. Camilleri"), + 116 => array("Groupe BPCE", "Banking", "67.303", "François Pérol"), + 117 => array("Target Corporation", "Retailing", "67.390", "Gregg Steinhafel"), + 118 => array("Temasek Holdings", "Sovereign Wealth Fund", "66.285", "Suppiah Dhanabalan"), + 119 => array("Medco Health Solutions", "Health care", "65.968", "David B. Snow, Jr."), + 120 => array("United States Postal Service", "Courier", "65.711", "John E. Potter"), + 121 => array("Gunvor", "Raw material", "65.0", "-"), + 122 => array("Crédit Agricole", "Financial Services", "64.800", "Jean-Paul Chifflet"), + 123 => array("Tokyo Electric Power", "Electricity generation", "64.964", "Tsunehisa Katsumata"), + 124 => array("Boeing", "Aerospace", "64.306", "Jim McNerney"), + 125 => array("Barclays Bank", "Banking", "63.978", "Bob Diamond"), + 126 => array("State Farm Insurance", "Insurance", "63.2", "Edward B. Rust Jr."), + 127 => array("Bosch Group", "Automotive", "63.147", "-"), + 128 => array("PTT Public Company Limited", "Oil and Gas", "62.998", "Prasert Bunsumpun"), + 129 => array("Royal Bank of Scotland", "Financial services", "62.770", "Stephen Hester"), + 130 => array("Mitsubishi Corporation", "Sogo shosha", "62.733", "Mikio Sasaki"), + 131 => array("Seven & I Holdings Co.", "Retailing", "62.436", "Toshifumi Suzuki"), + 132 => array("ÆON", "Retailing", "62.153", "-"), + 133 => array("Agricultural Bank of China", "Banking", "62.151", "Xiang Junbo"), + 134 => array("Johnson & Johnson", "Health care", "61.587", "William C. Weldon"), + 135 => array("Dell", "Information technology", "61.494", "Michael Dell"), + 136 => array("EADS", "Aerospace", "60.969", "Louis Gallois"), + 137 => array("Munich Re", "Financial services", "60.851", "Nikolaus von Bomhard"), + 138 => array("France Télécom", "Telecommunications", "60.801", "Stéphane Richard"), + 139 => array("Rio Tinto", "Mining", "60.323", "Tom Albanese"), + 140 => array("CNP Assurances", "Insurance", "59.846", "Gilles Benoist"), + 141 => array("Reliance Industries", "Conglomerate", "59.679", "Mukesh Ambani"), + 142 => array("Legal & General", "Financial services", "59.673", "Tim Breedon"), + 143 => array("Bank of China", "Banking", "59.668", "Xiao Gang"), + 144 => array("Unilever", "Consumer goods", "59.143", "Paul Polman"), + 145 => array("WellPoint", "Health care", "58.802", "Angela Braly"), + 146 => array("BNP Paribas", "Financial Services", "58.632", "Baudouin Prot"), + 147 => array("China Life Insurance", "Insurance", "58.460", "-"), + 148 => array("Edeka Group", "Retailing", "57.968", "-"), + 149 => array("PepsiCo", "Food", "57.838", "Indra Nooyi"), + 150 => array("Grupo Santander", "Banking", "57.388", "Emilio Botín"), + 151 => array("Auchan", "Retailing", "56.778", "Christophe Dubrulle"), + 152 => array("Noble Group", "Raw materials", "56.696", "Ricardo Leiman"), + 153 => array("China State Construction Engineering Corp", "Infrastructure", "56.104", "Sun Wenjie"), + 154 => array("Banco Bradesco", "Banking", "56.104", "Luiz Carlos Trabuco Cappi"), + 155 => array("A. P. Møller - Mærsk", "Transport", "56.090", "Nils Andersen"), + 156 => array("Dongfeng Motor", "Automotive", "55.864", "Xu Ping"), + 157 => array("China Southern Power Grid Company", "Electricity", "55.825", "Yuan Maozhen"), + 158 => array("Deutsche Bank", "Banking", "55.804", "Josef Ackermann"), + 159 => array("Shanghai Automotive Industry Corporation", "Automotive", "55.689", "Shen Jianhua"), + 160 => array("Fujitsu", "Electronics", "54.559", "Hiroaki Kurokawa"), + 161 => array("United Technologies", "Conglomerate", "54.326", "Louis R. Chênevert"), + 162 => array("Credit Suisse", "Financial services", "53.771", "Brady Dougan"), + 163 => array("China National Offshore Oil Corporation", "Oil and gas", "53.733", "Wang Yilin"), + 164 => array("Dow Chemical", "Manufacturing", "53.674", "Andrew N. Liveris"), + 165 => array("Saint-Gobain", "Construction", "53.607", "Pierre-André de Chalendar"), + 166 => array("UniCredit", "Banking", "53.332", "Federico Ghizzoni"), + 167 => array("Nokia", "Telecommunications", "53.322", "Stephen Elop"), + 168 => array("MetLife", "Insurance", "52.717", "C. Robert Henrikson"), + 169 => array("Renault", "Automotive", "52.073", "Carlos Ghosn"), + 170 => array("Mitsubishi UFJ Financial Group", "Banking", "51.479", "Nobuo Kuroyanagi"), + 171 => array("ThyssenKrupp", "Conglomerate", "50.717", "Heinrich Hiesinger"), + 172 => array("Sinochem Group", "Conglomerate", "50.632", "Liu Deschu"), + 173 => array("Hoffmann-La Roche", "Health care", "50.632", "Severin Schwan"), + 174 => array("Novartis", "Health care", "50.624", "Joseph Jimenez"), + 175 => array("Best Buy", "Retailing", "50.272", "Brian J. Dunn"), + 176 => array("United Parcel Service", "Transportation", "49.545", "Scott Davis"), + 177 => array("Pertamina", "Oil and gas", "48.717", "Karen Agustiawan"), + 178 => array("Dai-ichi Life", "Insurance", "47.855", "-"), + 179 => array("Banco Bilbao Vizcaya Argentaria", "Banking", "47.429", "Francisco González"), + 180 => array("Lowe's", "Retailing", "47.22", "Robert Niblock"), + 181 => array("Rosneft", "Oil and gas", "46.826", "-"), + 182 => array("National Mutual Insurance Federation of Agricultural Cooperatives (Zenkyoren or JA Kyosai)", "Insurance", "46.8", "-"), + 183 => array("VINCI", "Construction", "46.762", "Xavier Huillard"), + 184 => array("Veolia Environnement", "Public utilities", "46.482", "Antoine Frérot"), + 185 => array("Vale", "Mining", "46.481", "Murilo Ferreira"), + 186 => array("Woori Financial Group", "Financial services", "46.459", "Lee Pal Seung"), + 187 => array("Sonatrach", "Oil and gas", "46.420", "Djenane El Malik"), + 188 => array("GlaxoSmithKline", "Health care", "46.016", "Andrew Witty"), + 189 => array("Deutsche Bahn", "Transportation", "45.979", "Rüdiger Grube"), + 190 => array("Goldman Sachs", "Financial services", "45.976", "Lloyd Blankfein"), + 191 => array("Hon Hai Precision Industry", "Electronics", "45.899", "Terry Gou"), + 192 => array("Lockheed Martin", "Aerospace", "45.803", "Robert J. Stevens"), + 193 => array("Woolworths Limited", "Retailing", "45.170", "Michael Luscombe"), + 194 => array("Bouygues", "Conglomerate", "45.167", "Martin Bouygues"), + 195 => array("Bayer", "Health care", "44.901", "Marijn Dekkers"), + 196 => array("China Investment Corporation", "Sovereign wealth fund", "44.876", "Lou Jiwei"), + 197 => array("Imperial Tobacco", "Tobacco industry", "44.713", "Gareth Davis"), + 198 => array("Mitsui & Co.", "Sogo shosha", "44.048", "-"), + 199 => array("Sears Holdings", "Retailing", "44.043", "Louis D'Ambrosio"), + 200 => array("LG Electronics", "Conglomerate", "44.000", "Koo Bon-joon"), + 201 => array("Shinhan Financial Group", "Financial services", "43.975", "Sang Hoon Shin"), + 202 => array("Wesfarmers", "Retailing", "43.949", "Bob Every"), + 203 => array("Intel", "Semiconductors", "43.623", "Paul S. Otellini"), + 204 => array("Sumitomo Life Insurance", "Insurance", "43.272", "-"), + 205 => array("Caterpillar", "Heavy equipment", "42.588", "Douglas R. Oberhelman"), + 206 => array("Sanofi", "Health care", "42.218", "Chris Viehbacher"), + 207 => array("Chrysler", "Automotive", "41.946", "Sergio Marchionne"), + 208 => array("Bunge Limited", "Agriculture", "41.926", "Alberto Weisser"), + 209 => array("Sojitz", "Sogo shosha", "41.338", "Yutaka Kase"), + 210 => array("Safeway", "Retailing", "40.8507", "Steven Burd"), + 211 => array("SuperValu", "Retailing", "40.597", "Craig Herkert"), + 212 => array("UBS", "Financial services", "40.561", "Oswald Grübel"), + 213 => array("Kraft Foods", "Food", "40.386", "Irene Rosenfeld"), + 214 => array("Ahold", "Retailing", "40.229", "Dick Boer"), + 215 => array("Cisco", "Information technology", "40.04", "John T. Chambers"), + ); + } +} diff --git a/code/Employee.php b/code/Employee.php new file mode 100644 index 0000000..5037b30 --- /dev/null +++ b/code/Employee.php @@ -0,0 +1,51 @@ + 'Varchar', + ); + + public static $has_one = array( + 'Company' => 'Company' + ); + + public function requireDefaultRecords() { + parent::requireDefaultRecords(); + $employeeSet = DataObject::get('Employee'); + foreach ($employeeSet as $employee) { + $employee->delete(); + } + + foreach($this->data() as $employeeName){ + $employee = new Employee(); + $employee->Name = $employeeName; + $employee->write(); + } + DB::alteration_message("Added default records to Employee table","created"); + } + + /** + * Contains test data + * + * @return array + */ + public function data() { + return array( + 'Hayley', 'Octavius', 'Walker', 'Gary','Elton','Janna','Ursa','Lars','Moses','Lareina', + 'Elmo','Cara','Shea','Duncan','Velma','Acton','Galena','Heidi','Troy','Elliott','Cara', + 'Whitney','Summer','Olga','Tatum','Zeph','Jared','Hilda','Quinlan','Chaim','Xenos', + 'Cara','Tatiana','Tyrone','Juliet','Chester','Hannah','Imani','Quinn','Ariel','Abel', + 'Aretha','Courtney ','Shellie','Garrett','Camilla','Simon','Mohammad','Kirby','Rae', + 'Xena','Noel','Omar','Shannon','Iola','Maia','Serina','Taylor','Alice','Lucy','Austin', + 'Abel','Quinn','Yetta','Ulysses','Donovan','Castor','Emmanuel','Nero','Virginia', + 'Gregory','Neville','Abel','Len','Knox','Gavin','Pascale','Hyatt','Alden','Emerald', + 'Cherokee','Zeph','Adam','Uma','Serena','Isabelle','Kieran','Moses','Gay','Lavinia', + 'Elvis','Illana','Lee','Ariana','Hilel','Juliet','Gage','Larissa','Richard','Allen' + ); + } +} diff --git a/code/GridFieldTestPage.php b/code/GridFieldTestPage.php new file mode 100644 index 0000000..b380b30 --- /dev/null +++ b/code/GridFieldTestPage.php @@ -0,0 +1,69 @@ +URLSegment = 'gridfieldtest'; + $page->Title = 'GridField Test'; + $page->ParentID = 0; + $page->write(); + $page->doPublish(); + } + + public function getCMSFields() { + $fields = parent::getCMSFields(); + + $config = new GridFieldConfig(); + $config->addComponent(new GridFieldDefaultColumns()); + $config->addComponent(new GridFieldSortableHeader()); + $config->addComponent(new GridFieldPaginator); + $config->addComponent(new GridFieldFilter()); + $config->addComponent(new GridFieldAction_Delete()); + $config->addComponent(new GridFieldAction_Edit()); + $config->addComponent($forms = new GridFieldPopupForms()); + + $grid = new GridField('Companies', 'Companies', new DataList('Company'),$config); + + $fields->addFieldToTab('Root.GridField', $grid); + + return $fields; + } +} + +class GridFieldTestPage_Controller extends Page_Controller { + + /** + * + * @var string + */ + public $Title = "GridFieldTestPage"; + + public function init(){ + parent::init(); + Requirements::css('frameworktest/css/gridfieldtest.css','screen'); + } + + /** + * + * @return Form + */ + public function Form(){ + $config = new GridFieldConfig(); + $config->addComponent(new GridFieldDefaultColumns()); + $config->addComponent(new GridFieldSortableHeader()); + $config->addComponent(new GridFieldPaginator); + $config->addComponent(new GridFieldFilter()); + $config->addComponent(new GridFieldAction_Delete()); + $config->addComponent(new GridFieldAction_Edit()); + $config->addComponent(new GridFieldPopupForms()); + + $grid = new GridField('Companies', 'Companies', new DataList('Company'),$config); + return new Form($this,'Form',new FieldList($grid),new FieldList()); + } +} \ No newline at end of file diff --git a/code/RelationFieldsTestPage.php b/code/RelationFieldsTestPage.php index bce0358..71885a7 100644 --- a/code/RelationFieldsTestPage.php +++ b/code/RelationFieldsTestPage.php @@ -1,14 +1,15 @@ "TestCTFItem", + "HasOneCompany" => "Company", ); static $has_many = array( - "Items" => "TestCTFItem", + "HasManyCompanies" => "Company", ); static $many_many = array( - "CheckboxSet" => "TestCategory", + "ManyManyCompanies" => "Company", ); function getCMSFields() { @@ -18,9 +19,8 @@ function getCMSFields() { new CheckboxSetField("CheckboxSet", "CheckboxSetField", TestCategory::map())); $fields->addFieldToTab("Root.CTF", - new ComplexTableField($this, "Items", "TestCTFItem", array( - "Title" => "Item Title", - "Author" => "Item Author"))); + new ComplexTableField($this, "HasManyCompanies", "TestCTFItem") + ); // TODO Fix legacy relation CTFs in 3.0 diff --git a/css/gridfieldtest.css b/css/gridfieldtest.css new file mode 100644 index 0000000..94fb67c --- /dev/null +++ b/css/gridfieldtest.css @@ -0,0 +1,84 @@ +table.ss-gridfield { + box-shadow: none; + padding: 0; + margin: 20px 0 0 0; + border-collapse: separate; + border-bottom: 0 none; + border-left: 1px solid #929292; + border-right: 1px solid #929292; +} +.ss-gridfield thead th { + background: #424242; + padding: 5px; + font-weight: bold; + text-align: left; +} + +.ss-gridfield thead th.extra { + padding: 0 0 2px 5px; +} + +.ss-gridfield thead th.extra input.ss-gridfield-sort.text { + width: 100px; + font-size: 10px; + padding: 1px; + margin-bottom: 5px; + height: 15px; + background: #fff; +} + +.ss-gridfield thead th.extra.last div{ + display:inline-block; + +} + +.ss-gridfield thead th button { + color: #eee; + border: none; + background: none; + margin: 0 0 0 2px; + padding: 0; + width: auto; + text-shadow: none; + font-size: 14px; + font-family: Arial, Helvetica, sans-serif; +} + +.ss-gridfield thead th.extra.last button { + margin-left: 10px; + position: relative; + top: -10px; +} + +.ss-gridfield tbody td { + border-bottom: 1px solid #929292; + border-right: 1px solid #929292; + padding: 5px; +} + +.ss-gridfield tbody td:last-child { + border-right:0; +} + +.ss-gridfield tbody tr.odd td { + background: #f7f7f7; + color: #000; +} + +.ss-gridfield tbody td.first { + border-left: 1px solid #929292; +} + +.ss-gridfield tfoot .bottom-all { + text-align: center; + background: #424242; + color: #fff; + padding: 5px; +} + +#action_filter, #action_reset { + background: #fff; + color: #444; + padding: 2px; + margin-top: 10px; +}