diff --git a/DATABASE 0.1.3 to 0.1.4.sql b/DATABASE 0.1.3 to 0.1.4.sql index 85c2363d..27aba413 100644 --- a/DATABASE 0.1.3 to 0.1.4.sql +++ b/DATABASE 0.1.3 to 0.1.4.sql @@ -39,3 +39,37 @@ ALTER TABLE `nf_awards` ADD CONSTRAINT `nf_awards_ibfk_1` FOREIGN KEY (`team_id`) REFERENCES `nf_teams` (`team_id`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `nf_awards_ibfk_2` FOREIGN KEY (`game_id`) REFERENCES `nf_games` (`game_id`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `nf_awards_ibfk_3` FOREIGN KEY (`image_id`) REFERENCES `nf_files` (`file_id`) ON DELETE CASCADE ON UPDATE CASCADE; +DROP TABLE IF EXISTS `nf_partners`; +CREATE TABLE IF NOT EXISTS `nf_partners` ( + `partner_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, + `name` varchar(100) NOT NULL, + `logo_light` int(11) UNSIGNED DEFAULT NULL, + `logo_dark` int(11) UNSIGNED DEFAULT NULL, + `website` varchar(100) NOT NULL, + `facebook` varchar(100) NOT NULL, + `twitter` varchar(100) NOT NULL, + `code` varchar(50) NOT NULL, + `count` int(11) UNSIGNED NOT NULL, + `order` tinyint(6) UNSIGNED NOT NULL, + PRIMARY KEY (`partner_id`), + KEY `image_id` (`logo_light`), + KEY `logo_dark` (`logo_dark`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +DROP TABLE IF EXISTS `nf_partners_lang`; +CREATE TABLE IF NOT EXISTS `nf_partners_lang` ( + `partner_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, + `lang` varchar(5) NOT NULL, + `title` varchar(100) NOT NULL, + `description` text NOT NULL, + PRIMARY KEY (`partner_id`), + KEY `lang` (`lang`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +INSERT INTO `nf_settings_addons` VALUES('partners', 'module', '1'); +INSERT INTO `nf_settings_addons` VALUES('partners', 'widget', '1'); +INSERT INTO `nf_settings` VALUES('partners_logo_display', '', '', 'logo_dark', 'string'); +ALTER TABLE `nf_partners` + ADD CONSTRAINT `nf_partners_ibfk_1` FOREIGN KEY (`logo_light`) REFERENCES `nf_files` (`file_id`) ON DELETE SET NULL ON UPDATE SET NULL, + ADD CONSTRAINT `nf_partners_ibfk_2` FOREIGN KEY (`logo_dark`) REFERENCES `nf_files` (`file_id`) ON DELETE SET NULL ON UPDATE SET NULL; +ALTER TABLE `nf_partners_lang` + ADD CONSTRAINT `nf_partners_lang_ibfk_1` FOREIGN KEY (`partner_id`) REFERENCES `nf_partners` (`partner_id`) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT `nf_partners_lang_ibfk_2` FOREIGN KEY (`lang`) REFERENCES `nf_settings_languages` (`code`) ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/DATABASE.sql b/DATABASE.sql index 102c8f5a..0d830cd0 100644 --- a/DATABASE.sql +++ b/DATABASE.sql @@ -197,6 +197,8 @@ CREATE TABLE IF NOT EXISTS `nf_files` ( -- INSERT INTO `nf_files` VALUES(1, 1, 'Sans-titre-2.jpg', './upload/news/categories/ubfuejdfooirqya0pyltfeklja4ew4sn.jpg', '2015-05-29 22:34:16'); +INSERT INTO `nf_files` VALUES(2, 1, 'logo.png', 'upload/partners/zwvmsjijfljaka4rdblgvlype1lnbwaw.png', '2016-05-07 16:51:53'); +INSERT INTO `nf_files` VALUES(3, 1, 'logo_black.png', 'upload/partners/y4ofwq2ekppwnfpmnrmnafeivszlg5bd.png', '2016-05-07 16:51:53'); -- -------------------------------------------------------- @@ -649,6 +651,57 @@ CREATE TABLE IF NOT EXISTS `nf_pages_lang` ( -- -------------------------------------------------------- +-- +-- Structure de la table `nf_partners` +-- + +DROP TABLE IF EXISTS `nf_partners`; +CREATE TABLE IF NOT EXISTS `nf_partners` ( + `partner_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, + `name` varchar(100) NOT NULL, + `logo_light` int(11) UNSIGNED DEFAULT NULL, + `logo_dark` int(11) UNSIGNED DEFAULT NULL, + `website` varchar(100) NOT NULL, + `facebook` varchar(100) NOT NULL, + `twitter` varchar(100) NOT NULL, + `code` varchar(50) NOT NULL, + `count` int(11) UNSIGNED NOT NULL, + `order` tinyint(6) UNSIGNED NOT NULL, + PRIMARY KEY (`partner_id`), + KEY `image_id` (`logo_light`), + KEY `logo_dark` (`logo_dark`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- Contenu de la table `nf_partners` +-- + +INSERT INTO `nf_partners` VALUES(1, 'neofrag', 2, 3, 'https://neofr.ag', 'https://www.facebook.com/NeoFrag-CMS-345511868808600/', 'https://twitter.com/NeoFragCMS', '', 1, 0); + +-- -------------------------------------------------------- + +-- +-- Structure de la table `nf_partners_lang` +-- + +DROP TABLE IF EXISTS `nf_partners_lang`; +CREATE TABLE IF NOT EXISTS `nf_partners_lang` ( + `partner_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, + `lang` varchar(5) NOT NULL, + `title` varchar(100) NOT NULL, + `description` text NOT NULL, + PRIMARY KEY (`partner_id`), + KEY `lang` (`lang`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- Contenu de la table `nf_partners_lang` +-- + +INSERT INTO `nf_partners_lang` VALUES(1, 'fr', 'NeoFrag', 'NeoFrag est un CMS (système de gestion de contenu) à la fois puissant, compact et performant, pour créer votre site web orienté e-Sport !\r\n\r\n[b]C''est entièrement gratuit et personnalisable ![/b]\r\nPeu importe votre niveau dans le domaine du web, ce projet a pour but de vous proposer une solution clés en main pour créer votre site à l''aide d''interfaces modernes, personnalisables et évolutives pour correspondre à un maximum d''univers.'); + +-- -------------------------------------------------------- + -- -- Structure de la table `nf_search_keywords` -- @@ -739,6 +792,7 @@ INSERT INTO `nf_settings` VALUES('default_background_attachment', '', '', 'scrol INSERT INTO `nf_settings` VALUES('default_background_color', '', '', '#141d26', 'string'); INSERT INTO `nf_settings` VALUES('default_background_position', '', '', 'center top', 'string'); INSERT INTO `nf_settings` VALUES('default_background_repeat', '', '', 'no-repeat', 'string'); +INSERT INTO `nf_settings` VALUES('partners_logo_display', '', '', 'logo_dark', 'string'); -- -------------------------------------------------------- @@ -784,6 +838,8 @@ INSERT INTO `nf_settings_addons` VALUES('navigation', 'widget', '1'); INSERT INTO `nf_settings_addons` VALUES('news', 'module', '1'); INSERT INTO `nf_settings_addons` VALUES('news', 'widget', '1'); INSERT INTO `nf_settings_addons` VALUES('pages', 'module', '1'); +INSERT INTO `nf_settings_addons` VALUES('partners', 'module', '1'); +INSERT INTO `nf_settings_addons` VALUES('partners', 'widget', '1'); INSERT INTO `nf_settings_addons` VALUES('search', 'module', '1'); INSERT INTO `nf_settings_addons` VALUES('search', 'widget', '1'); INSERT INTO `nf_settings_addons` VALUES('settings', 'module', '1'); @@ -1351,6 +1407,20 @@ ALTER TABLE `nf_pages_lang` ADD CONSTRAINT `nf_pages_lang_ibfk_1` FOREIGN KEY (`page_id`) REFERENCES `nf_pages` (`page_id`) ON DELETE CASCADE ON UPDATE CASCADE, ADD CONSTRAINT `nf_pages_lang_ibfk_2` FOREIGN KEY (`lang`) REFERENCES `nf_settings_languages` (`code`) ON DELETE CASCADE ON UPDATE CASCADE; +-- +-- Contraintes pour la table `nf_partners` +-- +ALTER TABLE `nf_partners` + ADD CONSTRAINT `nf_partners_ibfk_1` FOREIGN KEY (`logo_light`) REFERENCES `nf_files` (`file_id`) ON DELETE SET NULL ON UPDATE SET NULL, + ADD CONSTRAINT `nf_partners_ibfk_2` FOREIGN KEY (`logo_dark`) REFERENCES `nf_files` (`file_id`) ON DELETE SET NULL ON UPDATE SET NULL; + +-- +-- Contraintes pour la table `nf_partners_lang` +-- +ALTER TABLE `nf_partners_lang` + ADD CONSTRAINT `nf_partners_lang_ibfk_1` FOREIGN KEY (`partner_id`) REFERENCES `nf_partners` (`partner_id`) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT `nf_partners_lang_ibfk_2` FOREIGN KEY (`lang`) REFERENCES `nf_settings_languages` (`code`) ON DELETE CASCADE ON UPDATE CASCADE; + -- -- Contraintes pour la table `nf_sessions` -- diff --git a/modules/partners/controllers/admin.php b/modules/partners/controllers/admin.php new file mode 100644 index 00000000..a77380fa --- /dev/null +++ b/modules/partners/controllers/admin.php @@ -0,0 +1,167 @@ +. +**************************************************************************/ + +class m_partners_c_admin extends Controller_Module +{ + public function index() + { + $this->load ->library('table') + ->add_columns(array( + array( + 'content' => function($data){ + return button_sort($data['partner_id'], 'admin/ajax/partners/sort.html'); + }, + 'size' => TRUE + ), + array( + 'title' => 'Nom', + 'content' => function($data){ + return $data['title']; + } + ), + array( + 'title' => 'Site internet', + 'content' => function($data){ + return ''.$data['website'].''; + } + ), + array( + 'title' => ''.icon('fa-line-chart').'', + 'content' => function($data){ + return $data['count']; + } + ), + array( + 'content' => array( + function($data){ + return button_edit('admin/partners/'.$data['partner_id'].'/'.$data['name'].'.html'); + }, + function($data){ + return button_delete('admin/partners/delete/'.$data['partner_id'].'/'.$data['name'].'.html'); + } + ), + 'size' => TRUE + ) + )) + ->data($this->model()->get_partners()) + ->no_data('Aucun partenaire'); + + return new Panel(array( + 'title' => 'Liste des partenaires', + 'icon' => 'fa-star-o', + 'content' => $this->table->display(), + 'footer' => button_add('admin/partners/add.html', 'Ajouter un partenaire') + )); + } + + public function add() + { + $this ->subtitle('Ajouter un partenaire') + ->load->library('form') + ->add_rules('partners') + ->add_submit($this('add')) + ->add_back('admin/partners.html'); + + if ($this->form->is_valid($post)) + { + $this->model()->add_partner($post['title'], + $post['logo_light'], + $post['logo_dark'], + $post['description'], + $post['website'], + $post['facebook'], + $post['twitter'], + $post['code']); + + //add_alert('success', $this('add_partner_success_message')); + + redirect('admin/partners.html'); + } + + return new Panel(array( + 'title' => 'Ajouter un partenaire', + 'icon' => 'fa-star-o', + 'content' => $this->form->display() + )); + } + + public function _edit($partner_id, $name, $logo_light, $logo_dark, $website, $facebook, $twitter, $count, $code, $title, $description) + { + $this ->subtitle($title) + ->load->library('form') + ->add_rules('partners', array( + 'title' => $title, + 'logo_light' => $logo_light, + 'logo_dark' => $logo_dark, + 'description' => $description, + 'website' => $website, + 'facebook' => $facebook, + 'twitter' => $twitter, + 'code' => $code + )) + ->add_submit($this('edit')) + ->add_back('admin/partners.html'); + + if ($this->form->is_valid($post)) + { + $this->model()->edit_partner( $partner_id, + $post['title'], + $post['logo_light'], + $post['logo_dark'], + $post['description'], + $post['website'], + $post['facebook'], + $post['twitter'], + $post['code']); + + //add_alert('success', $this('edit_partner_success_message')); + + redirect_back('admin/partners.html'); + } + + return new Panel(array( + 'title' => 'Éditer le partenaire', + 'icon' => 'fa-star-o', + 'content' => $this->form->display() + )); + } + + public function delete($partner_id, $title) + { + $this ->title('Supprimer le partenaire') + ->subtitle($title) + ->load->library('form') + ->confirm_deletion($this('delete_confirmation'), 'Êtes-vous sûr(e) de vouloir supprimer le partenaire '.$title.' ?'); + + if ($this->form->is_valid()) + { + $this->model()->delete_partner($partner_id); + + return 'OK'; + } + + echo $this->form->display(); + } +} + +/* +NeoFrag Alpha 0.1.4 +./modules/partners/controllers/admin.php +*/ \ No newline at end of file diff --git a/modules/partners/controllers/admin_ajax.php b/modules/partners/controllers/admin_ajax.php new file mode 100644 index 00000000..55211cf3 --- /dev/null +++ b/modules/partners/controllers/admin_ajax.php @@ -0,0 +1,45 @@ +. +**************************************************************************/ + +class m_partners_c_admin_ajax extends Controller +{ + public function sort($partner_id, $position) + { + $partners = array(); + + foreach ($this->db->select('partner_id')->from('nf_partners')->where('partner_id !=', $partner_id)->order_by('order', 'partner_id')->get() as $partner) + { + $partners[] = $partner; + } + + foreach (array_merge(array_slice($partners, 0, $position, TRUE), array($partner_id), array_slice($partners, $position, NULL, TRUE)) as $order => $partner_id) + { + $this->db ->where('partner_id', $partner_id) + ->update('nf_partners', array( + 'order' => $order + )); + } + } +} + +/* +NeoFrag Alpha 0.1.4 +./modules/partners/controllers/admin_ajax.php +*/ \ No newline at end of file diff --git a/modules/partners/controllers/admin_ajax_checker.php b/modules/partners/controllers/admin_ajax_checker.php new file mode 100644 index 00000000..ab68f663 --- /dev/null +++ b/modules/partners/controllers/admin_ajax_checker.php @@ -0,0 +1,45 @@ +. +**************************************************************************/ + +class m_partners_c_admin_ajax_checker extends Controller +{ + public function sort() + { + if (($check = $this->_check('id', 'position')) && $this->db->select('1')->from('nf_partners')->where('partner_id', $check['id'])->row()) + { + return $check; + } + + throw new Exception(NeoFrag::UNFOUND); + } + + private function _check() + { + if (!array_diff(func_get_args(), array_keys($args = array_intersect_key(post(), array_flip(func_get_args()))))) + { + return $args; + } + } +} + +/* +NeoFrag Alpha 0.1.4 +./modules/partners/controllers/admin_ajax_checker.php +*/ \ No newline at end of file diff --git a/modules/partners/controllers/admin_checker.php b/modules/partners/controllers/admin_checker.php new file mode 100644 index 00000000..1fee1d46 --- /dev/null +++ b/modules/partners/controllers/admin_checker.php @@ -0,0 +1,49 @@ +. +**************************************************************************/ + +class m_partners_c_admin_checker extends Controller_Module +{ + public function _edit($partner_id, $name) + { + if ($partner = $this->model()->check_partner($partner_id, $name)) + { + return $partner; + } + + throw new Exception(NeoFrag::UNFOUND); + } + + public function delete($partner_id, $name) + { + $this->ajax(); + + if ($partner = $this->model()->check_partner($partner_id, $name)) + { + return array($partner['partner_id'], $partner['title']); + } + + throw new Exception(NeoFrag::UNFOUND); + } +} + +/* +NeoFrag Alpha 0.1.4 +./modules/teams/controllers/admin_checker.php +*/ \ No newline at end of file diff --git a/modules/partners/controllers/checker.php b/modules/partners/controllers/checker.php new file mode 100644 index 00000000..26b66a91 --- /dev/null +++ b/modules/partners/controllers/checker.php @@ -0,0 +1,43 @@ +. +**************************************************************************/ + +class m_partners_c_checker extends Controller_Module +{ + public function _partner($partner_id, $name) + { + if ($partner = $this->model()->check_partner($partner_id, $name)) + { + $this->db ->where('partner_id', $partner_id) + ->update('nf_partners', array( + 'count' => $partner['count'] + 1 + )); + + header('Location: '.$partner['website']); + exit; + } + + throw new Exception(NeoFrag::UNFOUND); + } +} + +/* +NeoFrag Alpha 0.1.4 +./modules/partners/controllers/checker.php +*/ \ No newline at end of file diff --git a/modules/partners/controllers/index.php b/modules/partners/controllers/index.php new file mode 100644 index 00000000..a971d51f --- /dev/null +++ b/modules/partners/controllers/index.php @@ -0,0 +1,52 @@ +. +**************************************************************************/ + +class m_partners_c_index extends Controller_Module +{ + public function index() + { + $partners = $this->model()->get_partners(); + + if (!empty($partners)) + { + return new Panel(array( + 'title' => 'Nos partenaires', + 'icon' => 'fa-star-o', + 'content' => $this->load->view('index', array( + 'partners' => $partners + )) + )); + } + else + { + return new Panel(array( + 'title' => 'Nos partenaires', + 'icon' => 'fa-star-o', + 'style' => 'panel-info', + 'content' => '