+<?php\r
+// Common\r
+$__autoload['commonCore'] = dirname(__FILE__) . '/class.common.core.php';\r
+$__autoload['commonPage'] = dirname(__FILE__) . '/class.common.page.php';\r
+$__autoload['commonFiltre'] = dirname(__FILE__) . '/class.extranet.filtre.php';\r
+$__autoload['commonShortcuts'] = dirname(__FILE__) . '/class.extranet.shortcuts.php';\r
+\r
+?>
\ No newline at end of file
--- /dev/null
+<?php\r
+class commonCore extends cubeCore {\r
+ public $grades;\r
+ public $user;\r
+ public $agences;\r
+ public $categories;\r
+ public $ws_grades;\r
+ public function __construct()\r
+ {\r
+ parent::__construct();\r
+ $this->dbSync();\r
+\r
+ cubeLang::set();\r
+ $this->authentifie();\r
+\r
+ if ($this->user) {\r
+ // Défini la langue de l'utilisateur en fonction du contenu de user\r
+ cubeLang::set($this->user->lang);\r
+ } else {\r
+ // Sinon défini la langue par défaut (basée sur les entêtes envoyées\r
+ // par le navigateur)\r
+ cubeLang::set();\r
+ }\r
+\r
+ $this->grades = array(0 => __('Client'), 1 => __('Equipier'), 2 => __('Gérant'), 3 => __('Comptable'));\r
+ $this->categories = array(0 => __('Non défini'), 1 => __('Gestion de projet'),\r
+ 2 => __('Design Web'), 3 => __('Design Industriel'), 4 => __('Print'),\r
+ 5 => __('Newsletter'), 6 => __('Développement PHP'), 7 => __('Développement Flash'),\r
+ 8 => __('Fluidbook'), 9 => __('Formation'), 10 => __('Administratif'), 11 => __('Divers'),\r
+ 12 => __('Intégration HTML'), 13 => __('Motion design'), 14 => __('Design graphique'), 15 => __('Bandeaux de pub'), 16 => __('Applications mobiles'));\r
+ $this->projets_status = array(0 => __('En cours'), 1 => __('Terminé'));\r
+ $this->devis_status = array(0 => __('Brouillon'), 1 => __('Envoyé'),\r
+ 2 => __('Validé'), 3 => __('Refusé'));\r
+ $this->factures_status = array(0 => __('Brouillon'), 1 => __('Attente'),\r
+ 2 => __('Payée'), 3 => __('Annulée'), 4 => __('Avoir'));\r
+ $this->books_status = array(-1 => __('Brouillon'), 0 => __('Prêt'), 1 => __('Téléchargé'), 2 => __('Facturé'));\r
+ $this->agences = array('Paris', 'Montpellier');\r
+ $this->ws_grades = array(0 => __("Pas d'accès"), 1 => __('Client'), 2 => __('Client (droits de création)'), 3 => __('Revendeur'), 4 => __('Revendeur (droits de création)'), 5 => __('Administrateur'));\r
+ }\r
+\r
+ /**\r
+ * extranetCore::authentifie()\r
+ *\r
+ * Gère l'authentification à l'application\r
+ * Si des données proviennent de la validation d'un formulaire de login,\r
+ * elles sont copiées en tant que variable de session\r
+ * L'utilisateur courant est crée en fonction du contenu de ces variables\r
+ *\r
+ * @return\r
+ */\r
+ protected function authentifie()\r
+ {\r
+ // On regarde si user_email et user_password ont été postées\r
+ // Si c'est le cas, on les copie dans la session\r
+ $_SESSION['errorLogin'] = false;\r
+ if (isset($_POST['user_email'])) {\r
+ $_SESSION['user_email'] = $_POST['user_email'];\r
+ }\r
+\r
+ if (isset($_POST['user_password'])) {\r
+ $_SESSION['user_password'] = $_POST['user_password'];\r
+ }\r
+ // Maintenant on vérifie si ces variables sont présentes dans la session\r
+ if (!isset($_SESSION['user_email']) || !isset($_SESSION['user_password'])) {\r
+ // Ce n'est pas le cas, on place la variable connected à false\r
+ // Et on s'arrête là\r
+ $this->user = false;\r
+ return;\r
+ }\r
+ // Les variables sont présentes on vérifie la validité des informations\r
+ // Dans la base de données\r
+ // Utilisateur connecté à l'interface\r
+ $dao = new extranetDAOUtilisateur($this->con);\r
+ $this->user = $dao->selectByLoginPassword($_SESSION['user_email'], $_SESSION['user_password']);\r
+ if ($this->user == false) {\r
+ $_SESSION['errorLogin'] = true;\r
+ return;\r
+ }\r
+ if ($this->user->grade == 0) {\r
+ $daoClient = new extranetDAOClient($this->con);\r
+ $this->user->collegues = $daoClient->getColleguesList($this->user->utilisateur_id);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * extranetCore::dbSync()\r
+ *\r
+ * Fonction permettant de modéliser le contenu de la base de données\r
+ * et de la synchroniser le cas échéant.\r
+ *\r
+ * @return void\r
+ */\r
+ /**\r
+ * extranetCore::dbSync()\r
+ *\r
+ * @return\r
+ */\r
+ /**\r
+ * extranetCore::dbSync()\r
+ *\r
+ * @return\r
+ */\r
+ public function dbSync()\r
+ {\r
+ $cache = ROOT . '/cache/DB_SYNC';\r
+ if (!file_exists($cache)) {\r
+ touch($cache);\r
+ $dosync = true;\r
+ } else {\r
+ $dosync = filemtime(__FILE__) > filemtime($cache);\r
+ }\r
+\r
+ if (!$dosync) {\r
+ return;\r
+ }\r
+\r
+ $this->views->dropAllViews();\r
+\r
+ $db = new CubeDbStruct($this->con);\r
+ // Table utilisateurs\r
+ $db->utilisateurs->utilisateur_id('integer', 0, false);\r
+ $db->utilisateurs->login('varchar', 128, false);\r
+ $db->utilisateurs->email('varchar', 128, false);\r
+ $db->utilisateurs->password('varchar', 40, false);\r
+ $db->utilisateurs->nom('varchar', 64, false);\r
+ $db->utilisateurs->prenom('varchar', 64, false);\r
+ $db->utilisateurs->agence('varchar', 64, true);\r
+ $db->utilisateurs->entreprise('integer', 0, false);\r
+ $db->utilisateurs->grade('integer', 1, false);\r
+ $db->utilisateurs->adresse('varchar', 512, false);\r
+ $db->utilisateurs->code_postal('varchar', 20, false);\r
+ $db->utilisateurs->ville('varchar', 64, false);\r
+ $db->utilisateurs->pays('varchar', 2, false);\r
+ $db->utilisateurs->telephone('varchar', 30, false);\r
+ $db->utilisateurs->mobile('varchar', 30, false);\r
+ $db->utilisateurs->fax('varchar', 30, false);\r
+ $db->utilisateurs->lang('varchar', 2, false, '\'fr\'');\r
+ $db->utilisateurs->date_creation('integer', 0, false);\r
+ $db->utilisateurs->settings('text', 0, false);\r
+ $db->utilisateurs->notes('text', 0, false);\r
+ $db->utilisateurs->ws_id('integer', 0, true);\r
+ $db->utilisateurs->ws_password('varchar', 40, false);\r
+ $db->utilisateurs->ws_settings('text', 0, false);\r
+ $db->utilisateurs->ws_rights('text', 0, false);\r
+ // Clés\r
+ $db->utilisateurs->primary('pk_utilisateurs', 'utilisateur_id');\r
+ $db->utilisateurs->unique('unique_utilisateurs_email', 'email');\r
+ $db->utilisateurs->index('index_utilisateurs_nom', 'BTREE', 'nom');\r
+ $db->utilisateurs->index('index_utilisateurs_prenom', 'BTREE', 'prenom');\r
+ $db->utilisateurs->reference('fk_utilisateurs_entreprise', 'entreprise', 'entreprises', 'entreprise_id', false, false);\r
+ // Table entreprises\r
+ $db->entreprises->entreprise_id('integer', 0, false);\r
+ $db->entreprises->nom('varchar', 64, false);\r
+ $db->entreprises->adresse('varchar', 512, false);\r
+ $db->entreprises->code_postal('varchar', 20, false);\r
+ $db->entreprises->ville('varchar', 64, false);\r
+ $db->entreprises->pays('varchar', 2, false);\r
+ $db->entreprises->adresse_facturation('varchar', 512, false);\r
+ $db->entreprises->tva_intra('varchar', 14, false);\r
+ $db->entreprises->ws_grade('integer', 0, false);\r
+ $db->entreprises->ws_admin('integer', 0, false);\r
+ $db->entreprises->date_creation('integer', 0, false);\r
+ $db->entreprises->notes('text', 0, false);\r
+ $db->entreprises->site('varchar', 256, false);\r
+ // Clés\r
+ $db->entreprises->primary('pk_entreprises', 'entreprise_id');\r
+ $db->entreprises->index('index_entreprises_nom', 'BTREE', 'nom');\r
+ // .\r
+ // Table projets\r
+ $db->projets->projet_id('integer', 0, false);\r
+ $db->projets->nom('varchar', 256, false);\r
+ $db->projets->date_creation('integer', 0, false);\r
+ $db->projets->date_debut('integer', 0, false);\r
+ $db->projets->date_fin('integer', 0, false);\r
+ $db->projets->deadline('integer', 0, false);\r
+ $db->projets->devis('integer', 0, false);\r
+ $db->projets->client('integer', 0, false);\r
+ $db->projets->chef('integer', 0, false);\r
+ $db->projets->status('integer', 1, false);\r
+ // Clés\r
+ $db->projets->primary('pk_projets', 'projet_id');\r
+ $db->projets->index('index_projets_status', 'BTREE', 'status');\r
+ $db->projets->index('index_projets_nom', 'BTREE', 'nom');\r
+ $db->projets->reference('fk_projets_client', 'client', 'utilisateurs', 'utilisateur_id', false, false);\r
+ $db->projets->reference('fk_projets_chef', 'chef', 'utilisateurs', 'utilisateur_id', false, false);\r
+ // .\r
+ // Table taches\r
+ $db->taches->tache_id('integer', 0, false);\r
+ $db->taches->nom('varchar', 256, false);\r
+ $db->taches->categorie('integer', 0, false);\r
+ $db->taches->type('integer', 1, false);\r
+ $db->taches->budget('float', 0, false);\r
+ $db->taches->taux_journalier('float', 0, false);\r
+ $db->taches->projet('integer', 0, false);\r
+ // Clés\r
+ $db->taches->primary('pk_taches', 'tache_id');\r
+ $db->taches->reference('fk_taches_projet', 'projet', 'projets', 'projet_id');\r
+ $db->taches->index('index_taches_nom', 'BTREE', 'nom');\r
+ $db->taches->index('index_taches_categorie', 'BTREE', 'categorie');\r
+ // .\r
+ // Table timereport\r
+ $db->timereport->utilisateur_id('integer', 0, false);\r
+ $db->timereport->tache_id('integer', 0, false);\r
+ $db->timereport->date('integer', 0, false);\r
+ $db->timereport->heures('integer', 2, false);\r
+ // Clés\r
+ $db->timereport->primary('pk_timereport', 'utilisateur_id', 'tache_id', 'date');\r
+ $db->timereport->reference('fk_timereport_utilisateur_id', 'utilisateur_id', 'utilisateurs', 'utilisateur_id');\r
+ $db->timereport->reference('fk_timereport_tache_id', 'tache_id', 'taches', 'tache_id');\r
+ $db->timereport->index('index_timereport_date', 'BTREE', 'date');\r
+ // .\r
+ // Table devis\r
+ $db->devis->devis_id('integer', 0, false);\r
+ $db->devis->nom('varchar', 256, false);\r
+ $db->devis->client('integer', 0, false);\r
+ $db->devis->createur('integer', 0, false);\r
+ $db->devis->lignes('text', 0, false);\r
+ $db->devis->status('integer', 1, false);\r
+ $db->devis->total_ht('float', 0, false);\r
+ $db->devis->date_creation('integer', 0, false);\r
+ $db->devis->email('text', 0, false);\r
+ $db->devis->adresse('text', 0, false);\r
+ // Clés\r
+ $db->devis->primary('pk_devis', 'devis_id');\r
+ $db->devis->index('index_devis_status', 'BTREE', 'status');\r
+ $db->devis->index('index_devis_nom', 'BTREE', 'nom');\r
+ $db->devis->reference('fk_devis_client', 'client', 'utilisateurs', 'utilisateur_id');\r
+ $db->devis->reference('fk_devis_createur', 'createur', 'utilisateurs', 'utilisateur_id');\r
+ // .\r
+ // Table factures\r
+ $db->factures->facture_id('varchar', 8, false);\r
+ $db->factures->nom('varchar', 256, false);\r
+ $db->factures->projet('integer', 0, false);\r
+ $db->factures->createur('integer', 0, false);\r
+ $db->factures->lignes('text', 0, false);\r
+ $db->factures->status('integer', 1, false);\r
+ $db->factures->total_ht('float', 0, false);\r
+ $db->factures->date_creation('integer', 0, false);\r
+ $db->factures->texte_complementaire('text', 0, false);\r
+ $db->factures->adresse('text', 0, false);\r
+ $db->factures->informations_paiement('text', 0, false);\r
+ $db->factures->date_paiement('integer', 0, false);\r
+ $db->factures->avoir('varchar', 8, false);\r
+ // Clés\r
+ $db->factures->primary('pk_factures', 'facture_id');\r
+ $db->factures->index('index_factures_status', 'BTREE', 'status');\r
+ $db->factures->index('index_factures_nom', 'BTREE', 'nom');\r
+ $db->factures->reference('fk_factures_projet', 'projet', 'projets', 'projet_id');\r
+ $db->factures->reference('fk_factures_createur', 'createur', 'utilisateurs', 'utilisateur_id');\r
+ // .\r
+ // Table dashboard\r
+ $db->dashboard->dashboard_id('integer', 0, false);\r
+ $db->dashboard->nom('varchar', 128, false);\r
+ $db->dashboard->settings('text', 0, false);\r
+ $db->dashboard->rubrique('varchar', 32, false);\r
+ $db->dashboard->equipier('integer', 0, false);\r
+ $db->dashboard->state('integer', 1, false, '1');\r
+ $db->dashboard->sort('integer', 0, false);\r
+ // Clés\r
+ $db->dashboard->primary('pk_dashboard', 'dashboard_id');\r
+ $db->dashboard->reference('fk_dashboard_equipier', 'equipier', 'utilisateurs', 'utilisateur_id');\r
+ // .\r
+ // Table Signatures\r
+ $db->signatures->signature_id('integer', 0, false);\r
+ $db->signatures->nom('varchar', 256, false);\r
+ $db->signatures->fbcredit('varchar', 64, false);\r
+ $db->signatures->fblink('varchar', 64, false);\r
+ $db->signatures->partnercredit('varchar', 64, false);\r
+ $db->signatures->partnerlink('varchar', 64, false);\r
+ // Clés\r
+ $db->signatures->primary('pk_signatures', 'signature_id');\r
+ // Table jeux d'icones\r
+ $db->icones->icone_id('integer', 0, false);\r
+ $db->icones->nom('varchar', 256, false);\r
+ $db->icones->proprietaire('integer', 0, false);\r
+ $db->icones->couleur('varchar', 6, false);\r
+ $db->icones->date('integer', 0, false);\r
+ // Clés\r
+ $db->icones->primary('pk_icones', 'icone_id');\r
+ $db->icones->index('index_icones_nom', 'BTREE', 'nom');\r
+ $db->icones->index('index_icones_date', 'BTREE', 'date');\r
+ $db->icones->reference('fk_icones_proprietaire', 'proprietaire', 'utilisateurs', 'utilisateur_id');\r
+ // Table thèmes\r
+ $db->themes->theme_id('integer', 0, false);\r
+ $db->themes->icones('integer', 0, false);\r
+ $db->themes->proprietaire('integer', 0, false);\r
+ $db->themes->nom('varchar', 256, false);\r
+ $db->themes->date('integer', 0, false);\r
+ $db->themes->parametres('text', 0, false);\r
+ // Clés\r
+ $db->themes->primary('pk_themes', 'theme_id');\r
+ $db->themes->index('index_themes_nom', 'BTREE', 'nom');\r
+ $db->themes->index('index_themes_date', 'BTREE', 'date');\r
+ $db->themes->reference('fk_themes_icones', 'icones', 'icones', 'icone_id');\r
+ $db->themes->reference('fk_themes_proprietaires', 'proprietaire', 'utilisateurs', 'utilisateur_id');\r
+ // Table des droits des themes\r
+ // $db->themes_droits->theme_id('integer', 0, false);\r
+ // $db->themes_droits->utilisateur_id('integer', 0, false);\r
+ // Clés\r
+ // $db->themes_droits->primary('pk_themes_droits', 'theme_id', 'utilisateur_id');\r
+ // $db->themes_droits->reference('fk_themes_droits_theme_id', 'theme_id', 'themes', 'theme_id');\r
+ // $db->themes_droits->reference('fk_themes_droits_utilisateur_id', 'utilisateur_id', 'utilisateurs', 'utilisateur_id');\r
+ // Table des langues\r
+ $db->langues->lang_id('varchar', 20, false);\r
+ $db->langues->font('varchar', 64, false);\r
+ $db->langues->charset('varchar', 64, false);\r
+ $db->langues->traductions('text', 0, false);\r
+ // Clés\r
+ $db->langues->primary('pk_langues', 'lang_id');\r
+ // .\r
+ // Table documents\r
+ $db->documents->document_id('integer', 0, false);\r
+ $db->documents->file('varchar', 256, false);\r
+ $db->documents->proprietaire('integer', 0, false);\r
+ $db->documents->pages('integer', 0, false);\r
+ $db->documents->trim('text', 0, false);\r
+ $db->documents->date('integer', 0, false);\r
+ $db->documents->localInfos('text', 0, false);\r
+ $db->documents->generalInfos('text', 0, false);\r
+ $db->documents->conversionInfos('text', 0, false);\r
+ $db->documents->numberSections('text', 0, false);\r
+ $db->documents->localHash('varchar', 64, false);\r
+ // Clés\r
+ $db->documents->primary('pk_documents', 'document_id');\r
+ $db->documents->index('index_documents_file', 'BTREE', 'file');\r
+ $db->documents->index('index_documents_date', 'BTREE', 'date');\r
+ $db->documents->index('index_documents_localHash', 'BTREE', 'localHash');\r
+ $db->documents->reference('fk_documents_proprietaire', 'proprietaire', 'utilisateurs', 'utilisateur_id');\r
+ // .\r
+ // Table pages des documents\r
+ $db->document_links->document_id('integer', 0, false);\r
+ $db->document_links->document_page('integer', 0, false);\r
+ $db->document_links->links('text', 0, false);\r
+ $db->document_links->rulers('text', 0, false);\r
+ $db->document_links->update('integer', 0, false);\r
+ // Clés\r
+ $db->document_links->primary('pk_document_links', 'document_id', 'document_page', 'update');\r
+ $db->document_links->index('index_document_links_date', 'BTREE', 'update');\r
+ $db->document_links->index('index_document_links_document_id', 'BTREE', 'document_id');\r
+ // .\r
+ // Table Books\r
+ $db->books->book_id('integer', 0, false);\r
+ $db->books->nom('varchar', 256, false);\r
+ $db->books->lang('varchar', 20, false);\r
+ $db->books->theme('integer', 0, false);\r
+ $db->books->proprietaire('integer', 0, false);\r
+ // $db->books->projet('integer', 0, false);\r
+ $db->books->hash('varchar', 32, false);\r
+ $db->books->compteur_visites('integer', 0, false, 20);\r
+ $db->books->status('integer', 0, false);\r
+ $db->books->date_status('integer', 0, false);\r
+ $db->books->parametres('text', 0, false);\r
+ $db->books->chapters('text', 0, false);\r
+ $db->books->extras('text', 0, false);\r
+ $db->books->traductions('text', 0, false);\r
+ $db->books->date('integer', 0, false);\r
+ $db->books->numerotation('text', 0, false);\r
+ $db->books->changedate('integer', 0, false);\r
+ $db->books->compiledate('integer', 0, false);\r
+ // Clés\r
+ $db->books->primary('pk_books', 'book_id');\r
+ $db->books->index('index_books_nom', 'BTREE', 'nom');\r
+ $db->books->reference('fk_books_proprietaire', 'proprietaire', 'utilisateurs', 'utilisateur_id');\r
+ // $db->books->reference('fk_books_projet', 'projet', 'projets', 'projet_id');\r
+ // $db->books->reference('fk_books_lang', 'lang', 'langues', 'lang');\r
+ // .\r
+ // Table pages des publications\r
+ $db->book_pages->book_id('integer', 0, false);\r
+ $db->book_pages->book_page('integer', 0, false);\r
+ $db->book_pages->document_id('integer', 0, false);\r
+ $db->book_pages->document_page('integer', 0, false);\r
+ // Clés\r
+ $db->book_pages->primary('pk_book_pages', 'book_id', 'book_page');\r
+ $db->book_pages->reference('fk_book_pages_book_id', 'book_id', 'books', 'book_id');\r
+ $db->book_pages->reference('fk_book_pages_document_id', 'document_id', 'documents', 'document_id');\r
+ // .\r
+ // Table de cache des urls courtes\r
+ $db->book_short_url->long_url('varchar', 255, false);\r
+ $db->book_short_url->short_url('varchar', 64, false);\r
+ $db->book_short_url->book_id('integer', 0, false);\r
+ // Clés\r
+ $db->book_short_url->index('index_book_short_url_long_url', 'BTREE', 'long_url');\r
+ $db->book_short_url->index('index_book_short_url_book_id', 'BTREE', 'book_id');\r
+ // .\r
+ // Table des droits\r
+ $db->ws_users_tree->utilisateur_id('integer', 0, false);\r
+ $db->ws_users_tree->facturable_id('integer', 0, false);\r
+ $db->ws_users_tree->administrateur_id('integer', 0, false);\r
+ // Clé\r
+ $db->ws_users_tree->primary('pk_utilisateur_id', 'utilisateur_id');\r
+\r
+ try {\r
+ $dbi = new CubeDbStruct($this->con);\r
+ $dbi->synchronize($db);\r
+ }\r
+ catch(Exception $e) {\r
+ fb($e);\r
+ exit;\r
+ }\r
+\r
+ $this->views->createView('equipiers', 'SELECT * FROM utilisateurs WHERE grade>=1');\r
+ $this->views->createView('gerants', 'SELECT * FROM utilisateurs WHERE grade=2');\r
+ // $this->views->createView('ws_top_revendeurs', 'SELECT * FROM utilisateurs WHERE ws_grade=3 AND ws_admin IN(SELECT utilisateur_id FROM equipiers)');\r
+ // $this->views->createView('ws_revendeurs', 'SELECT * FROM utilisateurs WHERE ws_grade=3');\r
+ // $this->views->createView('ws_facturables', 'SELECT * FROM utilisateurs WHERE ws_grade BETWEEN 0 AND 3 AND ws_admin IN(SELECT utilisateur_id FROM equipiers)');\r
+ $this->views->createView('impayes_entreprises', 'SELECT SUM(total_ht) AS impaye, u.entreprise AS entreprise '\r
+ . 'FROM utilisateurs u LEFT JOIN projets p ON u.utilisateur_id=p.client LEFT JOIN factures f ON f.projet=p.projet_id '\r
+ . 'WHERE f.status=1 GROUP BY u.entreprise');\r
+ $this->views->createView('entreprises_inter', 'SELECT e.*,'\r
+ . 'SUM(f.total_ht) AS ca '\r
+ . 'FROM entreprises e LEFT JOIN utilisateurs u ON u.entreprise=e.entreprise_id AND grade=0 '\r
+ . 'LEFT JOIN projets p ON p.client=u.utilisateur_id '\r
+ . 'LEFT JOIN factures f ON f.projet=p.projet_id AND f.status IN(1,2) '\r
+ . 'GROUP BY e.entreprise_id');\r
+ $this->views->createView('entreprises_vue', 'SELECT e.*,i.impaye AS impaye'\r
+ . ' FROM entreprises_inter e LEFT JOIN impayes_entreprises i ON e.entreprise_id=i.entreprise');\r
+ $this->views->createView('clients_entreprise', 'SELECT u.*,e.nom AS rs, e.adresse_facturation AS adresse_facturation '\r
+ . 'FROM entreprises e LEFT JOIN utilisateurs u ON u.entreprise=e.entreprise_id AND u.grade=0');\r
+ $this->views->createView('utilisateurs_entreprise', 'SELECT u.*,e.nom AS rs, e.adresse_facturation AS adresse_facturation, '\r
+ . 'e.ws_grade, e.ws_admin '\r
+ . 'FROM entreprises e LEFT JOIN utilisateurs u ON u.entreprise=e.entreprise_id');\r
+ $this->views->createView('clients', 'SELECT u.*,e.nom AS rs, e.adresse_facturation AS adresse_facturation, i.impaye, '\r
+ . 'SUM(f.total_ht) AS ca '\r
+ . 'FROM entreprises e LEFT JOIN impayes_entreprises i ON e.entreprise_id=i.entreprise LEFT JOIN utilisateurs u ON u.entreprise=e.entreprise_id AND u.grade=0 LEFT JOIN projets p ON p.client=u.utilisateur_id LEFT JOIN factures f ON f.projet=p.projet_id AND f.status IN(1,2) '\r
+ . 'GROUP BY u.utilisateur_id');\r
+ $this->views->createView('taches_vue', 'SELECT taches.tache_id,taches.nom,taches.categorie,taches.type,taches.budget,taches.projet,taches.taux_journalier, '\r
+ . '(SUM(timereport.heures)/' . JOURNEE . ') AS jours_consommes, ((SUM(timereport.heures)/' . JOURNEE . ')/(taches.budget/taches.taux_journalier))*100 AS progression,(taches.budget/taches.taux_journalier) AS jours_prevus '\r
+ . 'FROM taches LEFT JOIN timereport ON taches.tache_id=timereport.tache_id '\r
+ . 'GROUP BY taches.tache_id');\r
+ $this->views->createView('taches_projet', 'SELECT projet, '\r
+ . 'SUM(jours_prevus) AS jours_prevus,SUM(budget) AS budget,'\r
+ . 'SUM(jours_consommes) AS jours_consommes, (SUM(jours_consommes)/SUM(jours_prevus))*100 AS progression '\r
+ . 'FROM taches_vue GROUP BY projet');\r
+ $this->views->createView('devis_vue', 'SELECT devis.devis_id,devis.nom,devis.lignes,devis.status,devis.total_ht,devis.date_creation,devis.email,clients.utilisateur_id AS client_id,clients.rs AS client,equipiers.prenom AS createur,equipiers.utilisateur_id AS createur_id,devis.adresse '\r
+ . 'FROM devis,clients,equipiers '\r
+ . 'WHERE devis.client=clients.utilisateur_id AND devis.createur=equipiers.utilisateur_id');\r
+ $this->views->createView('factures_payees', 'SELECT * FROM factures WHERE status=2');\r
+ $this->views->createView('factures_valides', 'SELECT * FROM factures WHERE status IN(1,2)');\r
+ $this->views->createView('projets_inter', 'SELECT projets.projet_id,projets.nom,projets.status,projets.date_debut,projets.date_fin,projets.date_creation,projets.deadline,projets.devis,'\r
+ . 'YEAR(FROM_UNIXTIME(projets.date_debut)) AS annee_debut,'\r
+ . 'IF(YEAR(FROM_UNIXTIME(projets.date_fin))=1970,YEAR(NOW()),YEAR(FROM_UNIXTIME(projets.date_fin))) AS annee_fin,'\r
+ . 'clients.rs AS client,equipiers.prenom AS chef,equipiers.utilisateur_id AS chef_id,clients.utilisateur_id AS client_id '\r
+ . 'FROM projets,clients_entreprise clients,equipiers '\r
+ . 'WHERE clients.utilisateur_id=projets.client AND equipiers.utilisateur_id=projets.chef', 'TEMPTABLE');\r
+ $this->views->createView('projets_inter1', 'SELECT projets.*,taches.jours_prevus,taches.jours_consommes,taches.progression,taches.budget AS budget, '\r
+ . 'IF(taches.budget>0,SUM(factures_valides.total_ht)/taches.budget,1) AS rapport_facturation, '\r
+ . 'SUM(factures_valides.total_ht) AS montant_facture '\r
+ . 'FROM projets_inter projets '\r
+ . 'LEFT JOIN taches_projet taches ON taches.projet=projets.projet_id '\r
+ . 'LEFT JOIN factures_valides ON factures_valides.projet=projets.projet_id '\r
+ . 'GROUP BY projets.projet_id,factures_valides.projet', 'TEMPTABLE');\r
+ $this->views->createView('projets_vue', 'SELECT p.*,SUM(f.total_ht) AS montant_paye, '\r
+ . 'IF(p.budget>0,SUM(f.total_ht)/p.budget,1) AS rapport_paiement '\r
+ . 'FROM projets_inter1 p '\r
+ . 'LEFT JOIN factures_payees f ON f.projet=p.projet_id '\r
+ . 'GROUP BY p.projet_id', 'TEMPTABLE');\r
+ $this->views->createView('factures_vue', 'SELECT factures.facture_id,factures.nom,factures.lignes,factures.status,factures.total_ht,factures.date_creation,factures.texte_complementaire,factures.informations_paiement,factures.date_paiement,factures.adresse,factures.avoir,'\r
+ . 'projets.projet_id AS projet_id,projets.nom AS projet,projets.client_id AS client_id,projets.client as client,equipiers.prenom AS createur,equipiers.utilisateur_id AS createur_id '\r
+ . 'FROM factures,projets_vue projets,equipiers '\r
+ . 'WHERE factures.projet=projets.projet_id AND factures.createur=equipiers.utilisateur_id AND (factures.facture_id>=0 OR factures.status=1) ');\r
+ $this->views->createView('projets_timereport', 'SELECT * FROM projets_vue WHERE status=0');\r
+ $this->views->createView('order_timereport', 'SELECT utilisateur_id,projet AS projet_id,MAX(date) AS derniere_activite FROM timereport,taches,projets WHERE taches.tache_id=timereport.tache_id AND taches.projet=projets.projet_id AND projets.status=0 GROUP BY utilisateur_id,taches.projet ORDER BY utilisateur_id ASC,MAX(date) DESC');\r
+ $this->views->createView('ca', 'SELECT SUM(total_ht) AS ca, YEAR(FROM_UNIXTIME(date_creation)) annee FROM factures WHERE status IN(1,2) GROUP BY annee');\r
+ $this->views->createView('ftpaccess', 'SELECT email AS userid,password AS passwd,utilisateur_id AS uid,'\r
+ . '\'1000\' AS gid,CONCAT(\'' . FTPROOT . '\',utilisateur_id) AS homedir, \'/bin/false\' AS shell '\r
+ . 'FROM utilisateurs WHERE grade=0 '\r
+ . 'UNION '\r
+ . 'SELECT email AS userid,ws_password AS passwd,utilisateur_id AS uid,'\r
+ . '\'1000\' AS gid,CONCAT(\'' . FTPROOT . '\',utilisateur_id) AS homedir, \'/bin/false\' AS shell '\r
+ . 'FROM utilisateurs WHERE grade=0 AND ws_password!=\'\'');\r
+ $this->views->createView('chiffres_categories', 'SELECT p.annee_fin AS annee, t.categorie, SUM(t.budget) AS ca '\r
+ . 'FROM projets_vue p, taches_vue t '\r
+ . 'WHERE t.projet=p.projet_id '\r
+ . 'GROUP BY t.categorie,p.annee_fin');\r
+ $this->views->createView('temps_categories', 'SELECT p.annee_fin AS annee, t.categorie, SUM(t.jours_consommes) AS jours_consommes,SUM(t.jours_prevus) AS jours_prevus '\r
+ . 'FROM projets_vue p, taches_vue t '\r
+ . 'WHERE t.projet=p.projet_id '\r
+ . 'GROUP BY t.categorie,p.annee_fin');\r
+ $this->views->createView('books_vue', 'SELECT b.*,b.proprietaire AS proprietaire_id,c.rs AS proprietaire_nom,c.ws_admin '\r
+ . 'FROM books b, utilisateurs_entreprise c WHERE b.proprietaire=c.utilisateur_id', 'TEMPTABLE');\r
+ $this->views->createView('themes_vue', 'SELECT t.*,COUNT(*) AS nb_books,GROUP_CONCAT(DISTINCT b.book_id) AS books '\r
+ . 'FROM themes t '\r
+ . 'LEFT JOIN books b ON t.theme_id=b.theme '\r
+ . 'GROUP BY t.theme_id');\r
+ // cubeDb::mysqlConvert($this->con);\r
+ }\r
+\r
+ public function sauvePreferencesUtilisateur()\r
+ {\r
+ $dao = new extranetDAOUtilisateur($this->con);\r
+ $dao->sauvePreferences($this->user);\r
+ }\r
+\r
+ public function refreshWSUsersTree()\r
+ {\r
+ $t = new wsUsersTree($this->con);\r
+ $t->refreshWSUsersTree();\r
+ }\r
+}\r
+\r
+?>
\ No newline at end of file
--- /dev/null
+<?php\r
+class commonFiltre {\r
+ public $titre;\r
+ public $varname;\r
+ public $settings;\r
+ public $values;\r
+ public $all;\r
+\r
+ public function __construct($titre, $varname, $settings)\r
+ {\r
+ $this->titre = $titre;\r
+ $this->varname = $varname;\r
+ $this->all = __('Tous');\r
+ $this->settings = isset($settings[$varname]) && count($settings[$varname])?$settings[$varname]:null;\r
+ $this->getValues();\r
+ }\r
+\r
+ protected function getValues()\r
+ {\r
+ global $core;\r
+ if ($this->varname == 'equipier' || $this->varname == 'equipier_participe') {\r
+ $r = $core->con->select('SELECT prenom,utilisateur_id FROM equipiers');\r
+ while ($r->fetch()) {\r
+ $this->values[$r->prenom] = $r->utilisateur_id;\r
+ }\r
+ } elseif ($this->varname == 'annee') {\r
+ for($i = 2006;$i <= date('Y', TIME);$i++) {\r
+ $this->values[$i] = $i;\r
+ }\r
+ $this->all = __('Toutes');\r
+ } elseif ($this->varname == 'status_projet') {\r
+ $this->values = array(__('En cours') => 'status_0',\r
+ __('Terminé') => 'status_1',\r
+ __('Facturés') => 'factures_1',\r
+ __('Non facturés') => 'factures_0');\r
+ } elseif ($this->varname == 'status_client_projet') {\r
+ $this->values = array(__('En cours') => '0', __('Terminé') => '1');\r
+ } elseif ($this->varname == 'status_facture') {\r
+ $this->values = array_flip($core->factures_status);\r
+ } elseif ($this->varname == 'annee_facture') {\r
+ for($i = 2008;$i <= date('Y', TIME);$i++) {\r
+ $this->values[$i] = $i;\r
+ }\r
+ $this->all = __('Toutes');\r
+ } elseif ($this->varname == 'status_devis') {\r
+ $this->values = array_flip($core->devis_status);\r
+ } elseif ($this->varname == 'impaye') {\r
+ $this->values = array(__('Non') => '0', __('Oui') => '1');\r
+ } elseif ($this->varname == 'status_book') {\r
+ $this->values = array_flip($core->books_status);\r
+ } elseif ($this->varname == 'annee_book') {\r
+ for($i = 2007;$i <= date('Y', TIME);$i++) {\r
+ $this->values[$i] = $i;\r
+ }\r
+ $this->all = __('Toutes');\r
+ }\r
+ }\r
+\r
+ public function display()\r
+ {\r
+ if (is_null($this->settings) || count($this->settings) == count($this->values)) {\r
+ $class = '';\r
+ $titre = $this->all;\r
+ } else {\r
+ $class = ' active';\r
+ $t = array();\r
+ foreach($this->settings as $k => $v) {\r
+ $t[] = array_search($k, $this->values);\r
+ }\r
+ $titre = implode(', ', $t);\r
+ }\r
+\r
+ $limit = 20;\r
+ $t = (mb_strlen($titre) > $limit)?mb_substr($titre, 0, $limit-4) . '...':$titre;\r
+\r
+ $res = '<div class="filtre">';\r
+ $res .= '<span>' . $this->titre . '</span>';\r
+ $res .= '<div class="input' . $class . '"><span>' . $t . '</span>' ;\r
+ $res .= '<a href="#" class="bt" title="' . $titre . '">' . cubeMedia::spacer(155, 18) . '</a>';\r
+ $res .= '</div>';\r
+ $res .= '<ul><li class="all">' . $this->all . '</li>';\r
+ $last = count($this->values)-1;\r
+ $i = 0;\r
+ foreach($this->values as $v => $k) {\r
+ $checked = false;\r
+ if (is_null($this->settings)) {\r
+ $checked = true;\r
+ } elseif (isset($this->settings[$k])) {\r
+ $checked = true;\r
+ }\r
+ $l = ($i == $last)?' class="last"':'';\r
+ $res .= '<li' . $l . '><label>' . form::checkbox(array($this->varname . '[' . $k . '][]'), 1, $checked) . ' ' . $v . '</label></li>';\r
+ $i++;\r
+ }\r
+ $res .= '</ul>';\r
+ $res .= '</div>';\r
+ return $res;\r
+ }\r
+\r
+ public static function test($varname, $settings)\r
+ {\r
+ $f = new extranetFiltre(__(''), $varname, array());\r
+ return isset($settings[$varname]) && count($f->values) > count($settings[$varname]) && count($settings[$varname]);\r
+ }\r
+}\r
+\r
+?>
\ No newline at end of file
--- /dev/null
+<?php\r
+class commonPage {\r
+ public static function header($args)\r
+ {\r
+ global $js;\r
+ global $core;\r
+ // Entête HTML\r
+ $res = '<html>';\r
+ $res .= '<head>';\r
+ // Titre de la page\r
+ $res .= '<title>' . TITLE . '</title>';\r
+ // Favicon\r
+ $res .= cubePage::favicon(IMG . '/favicon.ico');\r
+ $res .= '</head>';\r
+ $res .= '<body>';\r
+ // Haut de la page\r
+ $res .= '<div id="header">';\r
+ $res .= '<div class="content">';\r
+ // Le logo avec le lien de retour à l'accueil\r
+ $res .= '<div id="logo"><a href="' . SITE_PATH . '">' . cubeMedia::image(IMG . '/logo.png') . '</a></div>';\r
+ if ($core->user) {\r
+ $search = self::search($args);\r
+\r
+ $class = $search?' class="with-search"':'';\r
+ // Le message personnalisé avec un lien pour se déconnecter\r
+ $res .= '<div id="welcome"' . $class . '>' . __('Bienvenue') . ' ' . $core->user->prenom . ' ' . $core->user->nom . ' ';\r
+ $res .= '| <a href="#" class="popup" rel="mesParametres">' . __('Mes paramètres') . '</a> ';\r
+ $res .= '| <a href="' . SITE_PATH . 'logout">' . __('Se déconnecter') . '</a>';\r
+ if ($search) {\r
+ $res .= ' | ';\r
+ }\r
+ $res .= '</div>';\r
+ $res .= $search;\r
+ }\r
+ // Barre d'onglets\r
+ $res .= self::nav($args);\r
+ $res .= '</div>';\r
+ $res .= '</div>';\r
+ return $res;\r
+ }\r
+\r
+ public static function search($args)\r
+ {\r
+ global $core;\r
+\r
+ if (!extranetDroits::recherche($args[0])) {\r
+ return;\r
+ }\r
+ cubePage::emptyfield();\r
+ $settings = $core->user->getSettings($args[0]);\r
+ $action = 'search' . ucfirst($args[0]);\r
+\r
+ $default = isset($_POST['q'])?$_POST['q']:__('Rechercher');\r
+ // Formulaire de recherche\r
+ $res = '<form action="' . $action . '" method="post">';\r
+ $res .= '<div id="search">' . form::field('q', 20, 128, $default, 'empty_field') . '<a href="#" class="submit">' . cubeMedia::spacer(22, 22) . '</a></div>';\r
+ $res .= '</form>';\r
+ return $res;\r
+ }\r
+\r
+ public static function nav($args)\r
+ {\r
+ // Barre d'onglets\r
+ global $core;\r
+ // Liste des onglets\r
+ if (!$core->user) {\r
+ // Si pas d'utilisateur authentifié\r
+ $onglets = array(__('Identification') => 'login');\r
+ } else {\r
+ // Navigation personalisée de l'utilisateur en fonction de ses droits\r
+ if (MODE == 'extranet') {\r
+ $onglets = extranetDroits::navigation();\r
+ } elseif (MODE == 'ws') {\r
+ $onglets = wsDroits::navigation();\r
+ }\r
+ }\r
+ $res = '<div id="nav">';\r
+ foreach($onglets as $titre => $url) {\r
+ // Si cet onglet correspond à la page active, on le place actif\r
+ $active = ($args[0] == $url)?' class="active"':'';\r
+ $res.='<a href="' . SITE_PATH . $url . '">'.cubeMedia::cssRollover($core->typo->Onglet($titre,'',false)).'</a>';\r
+ }\r
+ $res .= '</div>';\r
+ return $res;\r
+ }\r
+\r
+ public static function barre($filtres = null, $action = null, $dashboard = null, $shortcuts = null)\r
+ {\r
+ if (is_null($shortcuts) && is_null($filtres)) {\r
+ return '<div id="bar" class="vide"></div>';\r
+ }\r
+\r
+ $res = '<div id="bar">';\r
+ $res .= '<div class="content">';\r
+\r
+ if (!is_null($shortcuts)) {\r
+ $res .= self::shortcuts($shortcuts);\r
+ }\r
+\r
+ if (!is_null($filtres) && is_array($filtres)) {\r
+ $res .= '<form action="' . $action . '" method="post" class="submitonchange">';\r
+ $hasRealFilters = false;\r
+ foreach($filtres as $filtre) {\r
+ $res .= $filtre->display();\r
+ if ($filtre instanceof extranetFiltre) {\r
+ $hasRealFilters = true;\r
+ }\r
+ }\r
+ if ($hasRealFilters) {\r
+ $res .= '<div class="efface_filtres"><a href="#" class="ajax" id="efface_filtres" rel="' . $action . '/efface">' . __('Effacer les filtres') . '</a><br /><a href="#" class="popup" rel="formDashboard/' . $dashboard . '">' . __('Ajouter à mon tableau de bord') . '</a></div>';\r
+ }\r
+ $res .= '</form>';\r
+ }\r
+ $res .= '</div>';\r
+ $res .= '</div>';\r
+ return $res;\r
+ }\r
+\r
+ public static function shortcuts($shortcuts)\r
+ {\r
+ global $core;\r
+\r
+ $res = '';\r
+ foreach($shortcuts as $s) {\r
+ $res .= '<div class="shortcut">' . $s . '</div>';\r
+ }\r
+ return $res;\r
+ }\r
+\r
+ public static function tMain($id = null, $big = false)\r
+ {\r
+ $id = is_null($id)?'':' id="' . $id . '"';\r
+ $big = $big?' class="big"':'';\r
+ return '<div id="main"' . $big . '><div id="logo-main"></div><div class="content"' . $id . '>';\r
+ }\r
+\r
+ public static function bh($class = null)\r
+ {\r
+ $class = is_null($class)?' class="b"':' class="b ' . $class . '"';\r
+\r
+ $res = '<table' . $class . '>';\r
+ $res .= '<tr class="b-top">';\r
+ $res .= '<td class="b-nw"></td><td class="b-n"></td><td class="b-ne"></td>';\r
+ $res .= '</tr>';\r
+ $res .= '<tr class="b-center">';\r
+ $res .= '<td class="b-w"></td><td class="b-c c"><div>';\r
+ return $res;\r
+ }\r
+\r
+ public static function bf($max=false)\r
+ {\r
+ $res = '</div></td><td class="b-e"></td>';\r
+ $res .= '</tr>';\r
+ $res .= '<tr class="b-footer">';\r
+ $res .= '<td class="b-sw"></td><td class="b-s">';\r
+ if($max){\r
+ $res.=cubeMedia::spacer(960,1);\r
+ }\r
+ $res.='</td><td class="b-se"></td>';\r
+ $res .= '</tr>';\r
+ $res .= '</table>';\r
+ return $res;\r
+ }\r
+\r
+ public static function pager($current, $nb, $par_page, $url)\r
+ {\r
+ $style = 'pgleft';\r
+ if ($par_page == 0 || $nb <= $par_page) {\r
+ return;\r
+ }\r
+ $par_groupe = 10;\r
+ $pager = new cubePager($current, $nb, $par_page, $par_groupe);\r
+ $pager->html_link_sep = ' ';\r
+ $pager->html_prev = '«';\r
+ $pager->html_next = '»';\r
+\r
+ $pager->base_url = '#" rel="' . $url . '" class="ajax';\r
+\r
+ $links = $pager->getLinks();\r
+ if (trim($links) == '') {\r
+ return '';\r
+ }\r
+\r
+ $res = '<div class="pager-holder ' . $style . '"><div class="pager ' . $style . '">';\r
+ $res .= $links;\r
+ $res .= '</div></div>';\r
+\r
+ return $res;\r
+ }\r
+\r
+ public static function bMain()\r
+ {\r
+ return '</div></div>';\r
+ }\r
+\r
+ public static function footer()\r
+ {\r
+ $res = '<div id="footer"></div>';\r
+ $res .= cubePage::googleAnalytics(GA);\r
+ $res .= '</body>';\r
+ $res .= '</html>';\r
+ return $res;\r
+ }\r
+}\r
+\r
+?>
\ No newline at end of file
--- /dev/null
+<?php\r
+\r
+class commonShortcuts {\r
+ public $titre;\r
+ public $values;\r
+ public $selectedValue;\r
+\r
+ public function __construct($titre, $values,$selectedValue)\r
+ {\r
+ $this->titre = $titre;\r
+ $this->values = $values;\r
+ $this->selectedValue=$selectedValue;\r
+ }\r
+\r
+ public function display()\r
+ {\r
+ // $limit = 20;\r
+ // $t = (mb_strlen($titre) > $limit)?mb_substr($titre, 0, $limit-4) . '...':$titre;\r
+ $res = '<div class="filtre">';\r
+ $res .= '<span>' . $this->titre . '</span>';\r
+ $res .= '<div class="input"><span><strong>'.$this->selectedValue.'</strong></span>' ;\r
+ $res .= '<a href="#" class="bt" title="' . $this->titre . '">' . cubeMedia::spacer(155, 18) . '</a>';\r
+ $res .= '</div>';\r
+ $res .= '<ul>';\r
+ $last = count($this->values)-1;\r
+ $i = 0;\r
+ foreach($this->values as $v => $k) {\r
+ $l = ($i == $last)?' class="last"':'';\r
+ $res .= '<li' . $l . '>'.cubeMedia::spacer(1,17).'<a href="' . $k . '">' . $v . '</a></li>';\r
+ $i++;\r
+ }\r
+ $res .= '</ul>';\r
+ $res .= '</div>';\r
+ return $res;\r
+ }\r
+}\r
+\r
+?>
\ No newline at end of file
<?php\r
// Extranet\r
-$__autoload['extranetCore'] = dirname(__FILE__) . '/class.extranet.core.php';\r
$__autoload['extranetAjax'] = dirname(__FILE__) . '/class.extranet.ajax.php';\r
-$__autoload['extranetPage'] = dirname(__FILE__) . '/class.extranet.page.php';\r
$__autoload['extranetUrl'] = dirname(__FILE__) . '/class.extranet.url.php';\r
$__autoload['extranetDroits'] = dirname(__FILE__) . '/class.extranet.droits.php';\r
-$__autoload['extranetFiltre'] = dirname(__FILE__) . '/class.extranet.filtre.php';\r
-$__autoload['extranetShortcuts'] = dirname(__FILE__) . '/class.extranet.shortcuts.php';\r
$__autoload['extranetPageChiffres'] = dirname(__FILE__) . '/class.extranet.page.chiffres.php';\r
\r
?>
\ No newline at end of file
+++ /dev/null
-<?php\r
-class extranetCore extends cubeCore {\r
- public $grades;\r
- public $user;\r
- public $agences;\r
- public $categories;\r
- public $ws_grades;\r
- public function __construct()\r
- {\r
- parent::__construct();\r
- $this->dbSync();\r
-\r
- cubeLang::set();\r
- $this->authentifie();\r
-\r
- if ($this->user) {\r
- // Défini la langue de l'utilisateur en fonction du contenu de user\r
- cubeLang::set($this->user->lang);\r
- } else {\r
- // Sinon défini la langue par défaut (basée sur les entêtes envoyées\r
- // par le navigateur)\r
- cubeLang::set();\r
- }\r
-\r
- $this->grades = array(0 => __('Client'), 1 => __('Equipier'), 2 => __('Gérant'), 3 => __('Comptable'));\r
- $this->categories = array(0 => __('Non défini'), 1 => __('Gestion de projet'),\r
- 2 => __('Design Web'), 3 => __('Design Industriel'), 4 => __('Print'),\r
- 5 => __('Newsletter'), 6 => __('Développement PHP'), 7 => __('Développement Flash'),\r
- 8 => __('Fluidbook'), 9 => __('Formation'), 10 => __('Administratif'), 11 => __('Divers'),\r
- 12 => __('Intégration HTML'), 13 => __('Motion design'), 14 => __('Design graphique'), 15 => __('Bandeaux de pub'), 16 => __('Applications mobiles'));\r
- $this->projets_status = array(0 => __('En cours'), 1 => __('Terminé'));\r
- $this->devis_status = array(0 => __('Brouillon'), 1 => __('Envoyé'),\r
- 2 => __('Validé'), 3 => __('Refusé'));\r
- $this->factures_status = array(0 => __('Brouillon'), 1 => __('Attente'),\r
- 2 => __('Payée'), 3 => __('Annulée'), 4 => __('Avoir'));\r
- $this->books_status = array(-1 => __('Brouillon'), 0 => __('Prêt'), 1 => __('Téléchargé'), 2 => __('Facturé'));\r
- $this->agences = array('Paris', 'Montpellier');\r
- $this->ws_grades = array(0 => __("Pas d'accès"), 1 => __('Client'), 2 => __('Client (droits de création)'), 3 => __('Revendeur'), 4 => __('Revendeur (droits de création)'), 5 => __('Administrateur'));\r
- }\r
-\r
- /**\r
- * extranetCore::authentifie()\r
- *\r
- * Gère l'authentification à l'application\r
- * Si des données proviennent de la validation d'un formulaire de login,\r
- * elles sont copiées en tant que variable de session\r
- * L'utilisateur courant est crée en fonction du contenu de ces variables\r
- *\r
- * @return\r
- */\r
- protected function authentifie()\r
- {\r
- // On regarde si user_email et user_password ont été postées\r
- // Si c'est le cas, on les copie dans la session\r
- $_SESSION['errorLogin'] = false;\r
- if (isset($_POST['user_email'])) {\r
- $_SESSION['user_email'] = $_POST['user_email'];\r
- }\r
-\r
- if (isset($_POST['user_password'])) {\r
- $_SESSION['user_password'] = $_POST['user_password'];\r
- }\r
- // Maintenant on vérifie si ces variables sont présentes dans la session\r
- if (!isset($_SESSION['user_email']) || !isset($_SESSION['user_password'])) {\r
- // Ce n'est pas le cas, on place la variable connected à false\r
- // Et on s'arrête là\r
- $this->user = false;\r
- return;\r
- }\r
- // Les variables sont présentes on vérifie la validité des informations\r
- // Dans la base de données\r
- // Utilisateur connecté à l'interface\r
- $dao = new extranetDAOUtilisateur($this->con);\r
- $this->user = $dao->selectByLoginPassword($_SESSION['user_email'], $_SESSION['user_password']);\r
- if ($this->user == false) {\r
- $_SESSION['errorLogin'] = true;\r
- return;\r
- }\r
- if ($this->user->grade == 0) {\r
- $daoClient = new extranetDAOClient($this->con);\r
- $this->user->collegues = $daoClient->getColleguesList($this->user->utilisateur_id);\r
- }\r
- }\r
-\r
- /**\r
- * extranetCore::dbSync()\r
- *\r
- * Fonction permettant de modéliser le contenu de la base de données\r
- * et de la synchroniser le cas échéant.\r
- *\r
- * @return void\r
- */\r
- /**\r
- * extranetCore::dbSync()\r
- *\r
- * @return\r
- */\r
- /**\r
- * extranetCore::dbSync()\r
- *\r
- * @return\r
- */\r
- public function dbSync()\r
- {\r
- $cache = ROOT . '/cache/DB_SYNC';\r
- if (!file_exists($cache)) {\r
- touch($cache);\r
- $dosync = true;\r
- } else {\r
- $dosync = filemtime(__FILE__) > filemtime($cache);\r
- }\r
-\r
- if (!$dosync) {\r
- return;\r
- }\r
-\r
- $this->views->dropAllViews();\r
-\r
- $db = new CubeDbStruct($this->con);\r
- // Table utilisateurs\r
- $db->utilisateurs->utilisateur_id('integer', 0, false);\r
- $db->utilisateurs->login('varchar', 128, false);\r
- $db->utilisateurs->email('varchar', 128, false);\r
- $db->utilisateurs->password('varchar', 40, false);\r
- $db->utilisateurs->nom('varchar', 64, false);\r
- $db->utilisateurs->prenom('varchar', 64, false);\r
- $db->utilisateurs->agence('varchar', 64, true);\r
- $db->utilisateurs->entreprise('integer', 0, false);\r
- $db->utilisateurs->grade('integer', 1, false);\r
- $db->utilisateurs->adresse('varchar', 512, false);\r
- $db->utilisateurs->code_postal('varchar', 20, false);\r
- $db->utilisateurs->ville('varchar', 64, false);\r
- $db->utilisateurs->pays('varchar', 2, false);\r
- $db->utilisateurs->telephone('varchar', 30, false);\r
- $db->utilisateurs->mobile('varchar', 30, false);\r
- $db->utilisateurs->fax('varchar', 30, false);\r
- $db->utilisateurs->lang('varchar', 2, false, '\'fr\'');\r
- $db->utilisateurs->date_creation('integer', 0, false);\r
- $db->utilisateurs->settings('text', 0, false);\r
- $db->utilisateurs->notes('text', 0, false);\r
- $db->utilisateurs->ws_id('integer', 0, true);\r
- $db->utilisateurs->ws_password('varchar', 40, false);\r
- $db->utilisateurs->ws_settings('text', 0, false);\r
- $db->utilisateurs->ws_rights('text', 0, false);\r
- // Clés\r
- $db->utilisateurs->primary('pk_utilisateurs', 'utilisateur_id');\r
- $db->utilisateurs->unique('unique_utilisateurs_email', 'email');\r
- $db->utilisateurs->index('index_utilisateurs_nom', 'BTREE', 'nom');\r
- $db->utilisateurs->index('index_utilisateurs_prenom', 'BTREE', 'prenom');\r
- $db->utilisateurs->reference('fk_utilisateurs_entreprise', 'entreprise', 'entreprises', 'entreprise_id', false, false);\r
- // Table entreprises\r
- $db->entreprises->entreprise_id('integer', 0, false);\r
- $db->entreprises->nom('varchar', 64, false);\r
- $db->entreprises->adresse('varchar', 512, false);\r
- $db->entreprises->code_postal('varchar', 20, false);\r
- $db->entreprises->ville('varchar', 64, false);\r
- $db->entreprises->pays('varchar', 2, false);\r
- $db->entreprises->adresse_facturation('varchar', 512, false);\r
- $db->entreprises->tva_intra('varchar', 14, false);\r
- $db->entreprises->ws_grade('integer', 0, false);\r
- $db->entreprises->ws_admin('integer', 0, false);\r
- $db->entreprises->date_creation('integer', 0, false);\r
- $db->entreprises->notes('text', 0, false);\r
- $db->entreprises->site('varchar', 256, false);\r
- // Clés\r
- $db->entreprises->primary('pk_entreprises', 'entreprise_id');\r
- $db->entreprises->index('index_entreprises_nom', 'BTREE', 'nom');\r
- // .\r
- // Table projets\r
- $db->projets->projet_id('integer', 0, false);\r
- $db->projets->nom('varchar', 256, false);\r
- $db->projets->date_creation('integer', 0, false);\r
- $db->projets->date_debut('integer', 0, false);\r
- $db->projets->date_fin('integer', 0, false);\r
- $db->projets->deadline('integer', 0, false);\r
- $db->projets->devis('integer', 0, false);\r
- $db->projets->client('integer', 0, false);\r
- $db->projets->chef('integer', 0, false);\r
- $db->projets->status('integer', 1, false);\r
- // Clés\r
- $db->projets->primary('pk_projets', 'projet_id');\r
- $db->projets->index('index_projets_status', 'BTREE', 'status');\r
- $db->projets->index('index_projets_nom', 'BTREE', 'nom');\r
- $db->projets->reference('fk_projets_client', 'client', 'utilisateurs', 'utilisateur_id', false, false);\r
- $db->projets->reference('fk_projets_chef', 'chef', 'utilisateurs', 'utilisateur_id', false, false);\r
- // .\r
- // Table taches\r
- $db->taches->tache_id('integer', 0, false);\r
- $db->taches->nom('varchar', 256, false);\r
- $db->taches->categorie('integer', 0, false);\r
- $db->taches->type('integer', 1, false);\r
- $db->taches->budget('float', 0, false);\r
- $db->taches->taux_journalier('float', 0, false);\r
- $db->taches->projet('integer', 0, false);\r
- // Clés\r
- $db->taches->primary('pk_taches', 'tache_id');\r
- $db->taches->reference('fk_taches_projet', 'projet', 'projets', 'projet_id');\r
- $db->taches->index('index_taches_nom', 'BTREE', 'nom');\r
- $db->taches->index('index_taches_categorie', 'BTREE', 'categorie');\r
- // .\r
- // Table timereport\r
- $db->timereport->utilisateur_id('integer', 0, false);\r
- $db->timereport->tache_id('integer', 0, false);\r
- $db->timereport->date('integer', 0, false);\r
- $db->timereport->heures('integer', 2, false);\r
- // Clés\r
- $db->timereport->primary('pk_timereport', 'utilisateur_id', 'tache_id', 'date');\r
- $db->timereport->reference('fk_timereport_utilisateur_id', 'utilisateur_id', 'utilisateurs', 'utilisateur_id');\r
- $db->timereport->reference('fk_timereport_tache_id', 'tache_id', 'taches', 'tache_id');\r
- $db->timereport->index('index_timereport_date', 'BTREE', 'date');\r
- // .\r
- // Table devis\r
- $db->devis->devis_id('integer', 0, false);\r
- $db->devis->nom('varchar', 256, false);\r
- $db->devis->client('integer', 0, false);\r
- $db->devis->createur('integer', 0, false);\r
- $db->devis->lignes('text', 0, false);\r
- $db->devis->status('integer', 1, false);\r
- $db->devis->total_ht('float', 0, false);\r
- $db->devis->date_creation('integer', 0, false);\r
- $db->devis->email('text', 0, false);\r
- $db->devis->adresse('text', 0, false);\r
- // Clés\r
- $db->devis->primary('pk_devis', 'devis_id');\r
- $db->devis->index('index_devis_status', 'BTREE', 'status');\r
- $db->devis->index('index_devis_nom', 'BTREE', 'nom');\r
- $db->devis->reference('fk_devis_client', 'client', 'utilisateurs', 'utilisateur_id');\r
- $db->devis->reference('fk_devis_createur', 'createur', 'utilisateurs', 'utilisateur_id');\r
- // .\r
- // Table factures\r
- $db->factures->facture_id('varchar', 8, false);\r
- $db->factures->nom('varchar', 256, false);\r
- $db->factures->projet('integer', 0, false);\r
- $db->factures->createur('integer', 0, false);\r
- $db->factures->lignes('text', 0, false);\r
- $db->factures->status('integer', 1, false);\r
- $db->factures->total_ht('float', 0, false);\r
- $db->factures->date_creation('integer', 0, false);\r
- $db->factures->texte_complementaire('text', 0, false);\r
- $db->factures->adresse('text', 0, false);\r
- $db->factures->informations_paiement('text', 0, false);\r
- $db->factures->date_paiement('integer', 0, false);\r
- $db->factures->avoir('varchar', 8, false);\r
- // Clés\r
- $db->factures->primary('pk_factures', 'facture_id');\r
- $db->factures->index('index_factures_status', 'BTREE', 'status');\r
- $db->factures->index('index_factures_nom', 'BTREE', 'nom');\r
- $db->factures->reference('fk_factures_projet', 'projet', 'projets', 'projet_id');\r
- $db->factures->reference('fk_factures_createur', 'createur', 'utilisateurs', 'utilisateur_id');\r
- // .\r
- // Table dashboard\r
- $db->dashboard->dashboard_id('integer', 0, false);\r
- $db->dashboard->nom('varchar', 128, false);\r
- $db->dashboard->settings('text', 0, false);\r
- $db->dashboard->rubrique('varchar', 32, false);\r
- $db->dashboard->equipier('integer', 0, false);\r
- $db->dashboard->state('integer', 1, false, '1');\r
- $db->dashboard->sort('integer', 0, false);\r
- // Clés\r
- $db->dashboard->primary('pk_dashboard', 'dashboard_id');\r
- $db->dashboard->reference('fk_dashboard_equipier', 'equipier', 'utilisateurs', 'utilisateur_id');\r
- // .\r
- // Table Signatures\r
- $db->signatures->signature_id('integer', 0, false);\r
- $db->signatures->nom('varchar', 256, false);\r
- $db->signatures->fbcredit('varchar', 64, false);\r
- $db->signatures->fblink('varchar', 64, false);\r
- $db->signatures->partnercredit('varchar', 64, false);\r
- $db->signatures->partnerlink('varchar', 64, false);\r
- // Clés\r
- $db->signatures->primary('pk_signatures', 'signature_id');\r
- // Table jeux d'icones\r
- $db->icones->icone_id('integer', 0, false);\r
- $db->icones->nom('varchar', 256, false);\r
- $db->icones->proprietaire('integer', 0, false);\r
- $db->icones->couleur('varchar', 6, false);\r
- $db->icones->date('integer', 0, false);\r
- // Clés\r
- $db->icones->primary('pk_icones', 'icone_id');\r
- $db->icones->index('index_icones_nom', 'BTREE', 'nom');\r
- $db->icones->index('index_icones_date', 'BTREE', 'date');\r
- $db->icones->reference('fk_icones_proprietaire', 'proprietaire', 'utilisateurs', 'utilisateur_id');\r
- // Table thèmes\r
- $db->themes->theme_id('integer', 0, false);\r
- $db->themes->icones('integer', 0, false);\r
- $db->themes->proprietaire('integer', 0, false);\r
- $db->themes->nom('varchar', 256, false);\r
- $db->themes->date('integer', 0, false);\r
- $db->themes->parametres('text', 0, false);\r
- // Clés\r
- $db->themes->primary('pk_themes', 'theme_id');\r
- $db->themes->index('index_themes_nom', 'BTREE', 'nom');\r
- $db->themes->index('index_themes_date', 'BTREE', 'date');\r
- $db->themes->reference('fk_themes_icones', 'icones', 'icones', 'icone_id');\r
- $db->themes->reference('fk_themes_proprietaires', 'proprietaire', 'utilisateurs', 'utilisateur_id');\r
- // Table des droits des themes\r
- // $db->themes_droits->theme_id('integer', 0, false);\r
- // $db->themes_droits->utilisateur_id('integer', 0, false);\r
- // Clés\r
- // $db->themes_droits->primary('pk_themes_droits', 'theme_id', 'utilisateur_id');\r
- // $db->themes_droits->reference('fk_themes_droits_theme_id', 'theme_id', 'themes', 'theme_id');\r
- // $db->themes_droits->reference('fk_themes_droits_utilisateur_id', 'utilisateur_id', 'utilisateurs', 'utilisateur_id');\r
- // Table des langues\r
- $db->langues->lang_id('varchar', 20, false);\r
- $db->langues->font('varchar', 64, false);\r
- $db->langues->charset('varchar', 64, false);\r
- $db->langues->traductions('text', 0, false);\r
- // Clés\r
- $db->langues->primary('pk_langues', 'lang_id');\r
- // .\r
- // Table documents\r
- $db->documents->document_id('integer', 0, false);\r
- $db->documents->file('varchar', 256, false);\r
- $db->documents->proprietaire('integer', 0, false);\r
- $db->documents->pages('integer', 0, false);\r
- $db->documents->trim('text', 0, false);\r
- $db->documents->date('integer', 0, false);\r
- $db->documents->localInfos('text', 0, false);\r
- $db->documents->generalInfos('text', 0, false);\r
- $db->documents->conversionInfos('text', 0, false);\r
- $db->documents->numberSections('text', 0, false);\r
- $db->documents->localHash('varchar', 64, false);\r
- // Clés\r
- $db->documents->primary('pk_documents', 'document_id');\r
- $db->documents->index('index_documents_file', 'BTREE', 'file');\r
- $db->documents->index('index_documents_date', 'BTREE', 'date');\r
- $db->documents->index('index_documents_localHash', 'BTREE', 'localHash');\r
- $db->documents->reference('fk_documents_proprietaire', 'proprietaire', 'utilisateurs', 'utilisateur_id');\r
- // .\r
- // Table pages des documents\r
- $db->document_links->document_id('integer', 0, false);\r
- $db->document_links->document_page('integer', 0, false);\r
- $db->document_links->links('text', 0, false);\r
- $db->document_links->rulers('text', 0, false);\r
- $db->document_links->update('integer', 0, false);\r
- // Clés\r
- $db->document_links->primary('pk_document_links', 'document_id', 'document_page', 'update');\r
- $db->document_links->index('index_document_links_date', 'BTREE', 'update');\r
- $db->document_links->index('index_document_links_document_id', 'BTREE', 'document_id');\r
- // .\r
- // Table Books\r
- $db->books->book_id('integer', 0, false);\r
- $db->books->nom('varchar', 256, false);\r
- $db->books->lang('varchar', 20, false);\r
- $db->books->theme('integer', 0, false);\r
- $db->books->proprietaire('integer', 0, false);\r
- // $db->books->projet('integer', 0, false);\r
- $db->books->hash('varchar', 32, false);\r
- $db->books->compteur_visites('integer', 0, false, 20);\r
- $db->books->status('integer', 0, false);\r
- $db->books->date_status('integer', 0, false);\r
- $db->books->parametres('text', 0, false);\r
- $db->books->chapters('text', 0, false);\r
- $db->books->extras('text', 0, false);\r
- $db->books->traductions('text', 0, false);\r
- $db->books->date('integer', 0, false);\r
- $db->books->numerotation('text', 0, false);\r
- $db->books->changedate('integer', 0, false);\r
- $db->books->compiledate('integer', 0, false);\r
- // Clés\r
- $db->books->primary('pk_books', 'book_id');\r
- $db->books->index('index_books_nom', 'BTREE', 'nom');\r
- $db->books->reference('fk_books_proprietaire', 'proprietaire', 'utilisateurs', 'utilisateur_id');\r
- // $db->books->reference('fk_books_projet', 'projet', 'projets', 'projet_id');\r
- // $db->books->reference('fk_books_lang', 'lang', 'langues', 'lang');\r
- // .\r
- // Table pages des publications\r
- $db->book_pages->book_id('integer', 0, false);\r
- $db->book_pages->book_page('integer', 0, false);\r
- $db->book_pages->document_id('integer', 0, false);\r
- $db->book_pages->document_page('integer', 0, false);\r
- // Clés\r
- $db->book_pages->primary('pk_book_pages', 'book_id', 'book_page');\r
- $db->book_pages->reference('fk_book_pages_book_id', 'book_id', 'books', 'book_id');\r
- $db->book_pages->reference('fk_book_pages_document_id', 'document_id', 'documents', 'document_id');\r
- // .\r
- // Table de cache des urls courtes\r
- $db->book_short_url->long_url('varchar', 255, false);\r
- $db->book_short_url->short_url('varchar', 64, false);\r
- $db->book_short_url->book_id('integer', 0, false);\r
- // Clés\r
- $db->book_short_url->index('index_book_short_url_long_url', 'BTREE', 'long_url');\r
- $db->book_short_url->index('index_book_short_url_book_id', 'BTREE', 'book_id');\r
- // .\r
- // Table des droits\r
- $db->ws_users_tree->utilisateur_id('integer', 0, false);\r
- $db->ws_users_tree->facturable_id('integer', 0, false);\r
- $db->ws_users_tree->administrateur_id('integer', 0, false);\r
- // Clé\r
- $db->ws_users_tree->primary('pk_utilisateur_id', 'utilisateur_id');\r
-\r
- try {\r
- $dbi = new CubeDbStruct($this->con);\r
- $dbi->synchronize($db);\r
- }\r
- catch(Exception $e) {\r
- fb($e);\r
- exit;\r
- }\r
-\r
- $this->views->createView('equipiers', 'SELECT * FROM utilisateurs WHERE grade>=1');\r
- $this->views->createView('gerants', 'SELECT * FROM utilisateurs WHERE grade=2');\r
- // $this->views->createView('ws_top_revendeurs', 'SELECT * FROM utilisateurs WHERE ws_grade=3 AND ws_admin IN(SELECT utilisateur_id FROM equipiers)');\r
- // $this->views->createView('ws_revendeurs', 'SELECT * FROM utilisateurs WHERE ws_grade=3');\r
- // $this->views->createView('ws_facturables', 'SELECT * FROM utilisateurs WHERE ws_grade BETWEEN 0 AND 3 AND ws_admin IN(SELECT utilisateur_id FROM equipiers)');\r
- $this->views->createView('impayes_entreprises', 'SELECT SUM(total_ht) AS impaye, u.entreprise AS entreprise '\r
- . 'FROM utilisateurs u LEFT JOIN projets p ON u.utilisateur_id=p.client LEFT JOIN factures f ON f.projet=p.projet_id '\r
- . 'WHERE f.status=1 GROUP BY u.entreprise');\r
- $this->views->createView('entreprises_inter', 'SELECT e.*,'\r
- . 'SUM(f.total_ht) AS ca '\r
- . 'FROM entreprises e LEFT JOIN utilisateurs u ON u.entreprise=e.entreprise_id AND grade=0 '\r
- . 'LEFT JOIN projets p ON p.client=u.utilisateur_id '\r
- . 'LEFT JOIN factures f ON f.projet=p.projet_id AND f.status IN(1,2) '\r
- . 'GROUP BY e.entreprise_id');\r
- $this->views->createView('entreprises_vue', 'SELECT e.*,i.impaye AS impaye'\r
- . ' FROM entreprises_inter e LEFT JOIN impayes_entreprises i ON e.entreprise_id=i.entreprise');\r
- $this->views->createView('clients_entreprise', 'SELECT u.*,e.nom AS rs, e.adresse_facturation AS adresse_facturation '\r
- . 'FROM entreprises e LEFT JOIN utilisateurs u ON u.entreprise=e.entreprise_id AND u.grade=0');\r
- $this->views->createView('utilisateurs_entreprise', 'SELECT u.*,e.nom AS rs, e.adresse_facturation AS adresse_facturation, '\r
- . 'e.ws_grade, e.ws_admin '\r
- . 'FROM entreprises e LEFT JOIN utilisateurs u ON u.entreprise=e.entreprise_id');\r
- $this->views->createView('clients', 'SELECT u.*,e.nom AS rs, e.adresse_facturation AS adresse_facturation, i.impaye, '\r
- . 'SUM(f.total_ht) AS ca '\r
- . 'FROM entreprises e LEFT JOIN impayes_entreprises i ON e.entreprise_id=i.entreprise LEFT JOIN utilisateurs u ON u.entreprise=e.entreprise_id AND u.grade=0 LEFT JOIN projets p ON p.client=u.utilisateur_id LEFT JOIN factures f ON f.projet=p.projet_id AND f.status IN(1,2) '\r
- . 'GROUP BY u.utilisateur_id');\r
- $this->views->createView('taches_vue', 'SELECT taches.tache_id,taches.nom,taches.categorie,taches.type,taches.budget,taches.projet,taches.taux_journalier, '\r
- . '(SUM(timereport.heures)/' . JOURNEE . ') AS jours_consommes, ((SUM(timereport.heures)/' . JOURNEE . ')/(taches.budget/taches.taux_journalier))*100 AS progression,(taches.budget/taches.taux_journalier) AS jours_prevus '\r
- . 'FROM taches LEFT JOIN timereport ON taches.tache_id=timereport.tache_id '\r
- . 'GROUP BY taches.tache_id');\r
- $this->views->createView('taches_projet', 'SELECT projet, '\r
- . 'SUM(jours_prevus) AS jours_prevus,SUM(budget) AS budget,'\r
- . 'SUM(jours_consommes) AS jours_consommes, (SUM(jours_consommes)/SUM(jours_prevus))*100 AS progression '\r
- . 'FROM taches_vue GROUP BY projet');\r
- $this->views->createView('devis_vue', 'SELECT devis.devis_id,devis.nom,devis.lignes,devis.status,devis.total_ht,devis.date_creation,devis.email,clients.utilisateur_id AS client_id,clients.rs AS client,equipiers.prenom AS createur,equipiers.utilisateur_id AS createur_id,devis.adresse '\r
- . 'FROM devis,clients,equipiers '\r
- . 'WHERE devis.client=clients.utilisateur_id AND devis.createur=equipiers.utilisateur_id');\r
- $this->views->createView('factures_payees', 'SELECT * FROM factures WHERE status=2');\r
- $this->views->createView('factures_valides', 'SELECT * FROM factures WHERE status IN(1,2)');\r
- $this->views->createView('projets_inter', 'SELECT projets.projet_id,projets.nom,projets.status,projets.date_debut,projets.date_fin,projets.date_creation,projets.deadline,projets.devis,'\r
- . 'YEAR(FROM_UNIXTIME(projets.date_debut)) AS annee_debut,'\r
- . 'IF(YEAR(FROM_UNIXTIME(projets.date_fin))=1970,YEAR(NOW()),YEAR(FROM_UNIXTIME(projets.date_fin))) AS annee_fin,'\r
- . 'clients.rs AS client,equipiers.prenom AS chef,equipiers.utilisateur_id AS chef_id,clients.utilisateur_id AS client_id '\r
- . 'FROM projets,clients_entreprise clients,equipiers '\r
- . 'WHERE clients.utilisateur_id=projets.client AND equipiers.utilisateur_id=projets.chef', 'TEMPTABLE');\r
- $this->views->createView('projets_inter1', 'SELECT projets.*,taches.jours_prevus,taches.jours_consommes,taches.progression,taches.budget AS budget, '\r
- . 'IF(taches.budget>0,SUM(factures_valides.total_ht)/taches.budget,1) AS rapport_facturation, '\r
- . 'SUM(factures_valides.total_ht) AS montant_facture '\r
- . 'FROM projets_inter projets '\r
- . 'LEFT JOIN taches_projet taches ON taches.projet=projets.projet_id '\r
- . 'LEFT JOIN factures_valides ON factures_valides.projet=projets.projet_id '\r
- . 'GROUP BY projets.projet_id,factures_valides.projet', 'TEMPTABLE');\r
- $this->views->createView('projets_vue', 'SELECT p.*,SUM(f.total_ht) AS montant_paye, '\r
- . 'IF(p.budget>0,SUM(f.total_ht)/p.budget,1) AS rapport_paiement '\r
- . 'FROM projets_inter1 p '\r
- . 'LEFT JOIN factures_payees f ON f.projet=p.projet_id '\r
- . 'GROUP BY p.projet_id', 'TEMPTABLE');\r
- $this->views->createView('factures_vue', 'SELECT factures.facture_id,factures.nom,factures.lignes,factures.status,factures.total_ht,factures.date_creation,factures.texte_complementaire,factures.informations_paiement,factures.date_paiement,factures.adresse,factures.avoir,'\r
- . 'projets.projet_id AS projet_id,projets.nom AS projet,projets.client_id AS client_id,projets.client as client,equipiers.prenom AS createur,equipiers.utilisateur_id AS createur_id '\r
- . 'FROM factures,projets_vue projets,equipiers '\r
- . 'WHERE factures.projet=projets.projet_id AND factures.createur=equipiers.utilisateur_id AND (factures.facture_id>=0 OR factures.status=1) ');\r
- $this->views->createView('projets_timereport', 'SELECT * FROM projets_vue WHERE status=0');\r
- $this->views->createView('order_timereport', 'SELECT utilisateur_id,projet AS projet_id,MAX(date) AS derniere_activite FROM timereport,taches,projets WHERE taches.tache_id=timereport.tache_id AND taches.projet=projets.projet_id AND projets.status=0 GROUP BY utilisateur_id,taches.projet ORDER BY utilisateur_id ASC,MAX(date) DESC');\r
- $this->views->createView('ca', 'SELECT SUM(total_ht) AS ca, YEAR(FROM_UNIXTIME(date_creation)) annee FROM factures WHERE status IN(1,2) GROUP BY annee');\r
- $this->views->createView('ftpaccess', 'SELECT email AS userid,password AS passwd,utilisateur_id AS uid,'\r
- . '\'1000\' AS gid,CONCAT(\'' . FTPROOT . '\',utilisateur_id) AS homedir, \'/bin/false\' AS shell '\r
- . 'FROM utilisateurs WHERE grade=0 '\r
- . 'UNION '\r
- . 'SELECT email AS userid,ws_password AS passwd,utilisateur_id AS uid,'\r
- . '\'1000\' AS gid,CONCAT(\'' . FTPROOT . '\',utilisateur_id) AS homedir, \'/bin/false\' AS shell '\r
- . 'FROM utilisateurs WHERE grade=0 AND ws_password!=\'\'');\r
- $this->views->createView('chiffres_categories', 'SELECT p.annee_fin AS annee, t.categorie, SUM(t.budget) AS ca '\r
- . 'FROM projets_vue p, taches_vue t '\r
- . 'WHERE t.projet=p.projet_id '\r
- . 'GROUP BY t.categorie,p.annee_fin');\r
- $this->views->createView('temps_categories', 'SELECT p.annee_fin AS annee, t.categorie, SUM(t.jours_consommes) AS jours_consommes,SUM(t.jours_prevus) AS jours_prevus '\r
- . 'FROM projets_vue p, taches_vue t '\r
- . 'WHERE t.projet=p.projet_id '\r
- . 'GROUP BY t.categorie,p.annee_fin');\r
- $this->views->createView('books_vue', 'SELECT b.*,b.proprietaire AS proprietaire_id,c.rs AS proprietaire_nom,c.ws_admin '\r
- . 'FROM books b, utilisateurs_entreprise c WHERE b.proprietaire=c.utilisateur_id', 'TEMPTABLE');\r
- $this->views->createView('themes_vue', 'SELECT t.*,COUNT(*) AS nb_books,GROUP_CONCAT(DISTINCT b.book_id) AS books '\r
- . 'FROM themes t '\r
- . 'LEFT JOIN books b ON t.theme_id=b.theme '\r
- . 'GROUP BY t.theme_id');\r
- // cubeDb::mysqlConvert($this->con);\r
- }\r
-\r
- public function sauvePreferencesUtilisateur()\r
- {\r
- $dao = new extranetDAOUtilisateur($this->con);\r
- $dao->sauvePreferences($this->user);\r
- }\r
-\r
- public function refreshWSUsersTree()\r
- {\r
- $t = new wsUsersTree($this->con);\r
- $t->refreshWSUsersTree();\r
- }\r
-}\r
-\r
-?>
\ No newline at end of file
+++ /dev/null
-<?php\r
-class extranetFiltre {\r
- public $titre;\r
- public $varname;\r
- public $settings;\r
- public $values;\r
- public $all;\r
-\r
- public function __construct($titre, $varname, $settings)\r
- {\r
- $this->titre = $titre;\r
- $this->varname = $varname;\r
- $this->all = __('Tous');\r
- $this->settings = isset($settings[$varname]) && count($settings[$varname])?$settings[$varname]:null;\r
- $this->getValues();\r
- }\r
-\r
- protected function getValues()\r
- {\r
- global $core;\r
- if ($this->varname == 'equipier' || $this->varname == 'equipier_participe') {\r
- $r = $core->con->select('SELECT prenom,utilisateur_id FROM equipiers');\r
- while ($r->fetch()) {\r
- $this->values[$r->prenom] = $r->utilisateur_id;\r
- }\r
- } elseif ($this->varname == 'annee') {\r
- for($i = 2006;$i <= date('Y', TIME);$i++) {\r
- $this->values[$i] = $i;\r
- }\r
- $this->all = __('Toutes');\r
- } elseif ($this->varname == 'status_projet') {\r
- $this->values = array(__('En cours') => 'status_0',\r
- __('Terminé') => 'status_1',\r
- __('Facturés') => 'factures_1',\r
- __('Non facturés') => 'factures_0');\r
- } elseif ($this->varname == 'status_client_projet') {\r
- $this->values = array(__('En cours') => '0', __('Terminé') => '1');\r
- } elseif ($this->varname == 'status_facture') {\r
- $this->values = array_flip($core->factures_status);\r
- } elseif ($this->varname == 'annee_facture') {\r
- for($i = 2008;$i <= date('Y', TIME);$i++) {\r
- $this->values[$i] = $i;\r
- }\r
- $this->all = __('Toutes');\r
- } elseif ($this->varname == 'status_devis') {\r
- $this->values = array_flip($core->devis_status);\r
- } elseif ($this->varname == 'impaye') {\r
- $this->values = array(__('Non') => '0', __('Oui') => '1');\r
- } elseif ($this->varname == 'status_book') {\r
- $this->values = array_flip($core->books_status);\r
- } elseif ($this->varname == 'annee_book') {\r
- for($i = 2007;$i <= date('Y', TIME);$i++) {\r
- $this->values[$i] = $i;\r
- }\r
- $this->all = __('Toutes');\r
- }\r
- }\r
-\r
- public function display()\r
- {\r
- if (is_null($this->settings) || count($this->settings) == count($this->values)) {\r
- $class = '';\r
- $titre = $this->all;\r
- } else {\r
- $class = ' active';\r
- $t = array();\r
- foreach($this->settings as $k => $v) {\r
- $t[] = array_search($k, $this->values);\r
- }\r
- $titre = implode(', ', $t);\r
- }\r
-\r
- $limit = 20;\r
- $t = (mb_strlen($titre) > $limit)?mb_substr($titre, 0, $limit-4) . '...':$titre;\r
-\r
- $res = '<div class="filtre">';\r
- $res .= '<span>' . $this->titre . '</span>';\r
- $res .= '<div class="input' . $class . '"><span>' . $t . '</span>' ;\r
- $res .= '<a href="#" class="bt" title="' . $titre . '">' . cubeMedia::spacer(155, 18) . '</a>';\r
- $res .= '</div>';\r
- $res .= '<ul><li class="all">' . $this->all . '</li>';\r
- $last = count($this->values)-1;\r
- $i = 0;\r
- foreach($this->values as $v => $k) {\r
- $checked = false;\r
- if (is_null($this->settings)) {\r
- $checked = true;\r
- } elseif (isset($this->settings[$k])) {\r
- $checked = true;\r
- }\r
- $l = ($i == $last)?' class="last"':'';\r
- $res .= '<li' . $l . '><label>' . form::checkbox(array($this->varname . '[' . $k . '][]'), 1, $checked) . ' ' . $v . '</label></li>';\r
- $i++;\r
- }\r
- $res .= '</ul>';\r
- $res .= '</div>';\r
- return $res;\r
- }\r
-\r
- public static function test($varname, $settings)\r
- {\r
- $f = new extranetFiltre(__(''), $varname, array());\r
- return isset($settings[$varname]) && count($f->values) > count($settings[$varname]) && count($settings[$varname]);\r
- }\r
-}\r
-\r
-?>
\ No newline at end of file
+++ /dev/null
-<?php\r
-class extranetPage {\r
- public static function header($args)\r
- {\r
- global $js;\r
- global $core;\r
- // Entête HTML\r
- $res = '<html>';\r
- $res .= '<head>';\r
- // Titre de la page\r
- $res .= '<title>' . TITLE . '</title>';\r
- // Favicon\r
- $res .= cubePage::favicon(IMG . '/favicon.ico');\r
- $res .= '</head>';\r
- $res .= '<body>';\r
- // Haut de la page\r
- $res .= '<div id="header">';\r
- $res .= '<div class="content">';\r
- // Le logo avec le lien de retour à l'accueil\r
- $res .= '<div id="logo"><a href="' . SITE_PATH . '">' . cubeMedia::image(IMG . '/logo.png') . '</a></div>';\r
- if ($core->user) {\r
- $search = self::search($args);\r
-\r
- $class = $search?' class="with-search"':'';\r
- // Le message personnalisé avec un lien pour se déconnecter\r
- $res .= '<div id="welcome"' . $class . '>' . __('Bienvenue') . ' ' . $core->user->prenom . ' ' . $core->user->nom . ' ';\r
- $res .= '| <a href="#" class="popup" rel="mesParametres">' . __('Mes paramètres') . '</a> ';\r
- $res .= '| <a href="' . SITE_PATH . 'logout">' . __('Se déconnecter') . '</a>';\r
- if ($search) {\r
- $res .= ' | ';\r
- }\r
- $res .= '</div>';\r
- $res .= $search;\r
- }\r
- // Barre d'onglets\r
- $res .= self::nav($args);\r
- $res .= '</div>';\r
- $res .= '</div>';\r
- return $res;\r
- }\r
-\r
- public static function search($args)\r
- {\r
- global $core;\r
-\r
- if (!extranetDroits::recherche($args[0])) {\r
- return;\r
- }\r
- cubePage::emptyfield();\r
- $settings = $core->user->getSettings($args[0]);\r
- $action = 'search' . ucfirst($args[0]);\r
-\r
- $default = isset($_POST['q'])?$_POST['q']:__('Rechercher');\r
- // Formulaire de recherche\r
- $res = '<form action="' . $action . '" method="post">';\r
- $res .= '<div id="search">' . form::field('q', 20, 128, $default, 'empty_field') . '<a href="#" class="submit">' . cubeMedia::spacer(22, 22) . '</a></div>';\r
- $res .= '</form>';\r
- return $res;\r
- }\r
-\r
- public static function nav($args)\r
- {\r
- // Barre d'onglets\r
- global $core;\r
- // Liste des onglets\r
- if (!$core->user) {\r
- // Si pas d'utilisateur authentifié\r
- $onglets = array(__('Identification') => 'login');\r
- } else {\r
- // Navigation personalisée de l'utilisateur en fonction de ses droits\r
- if (MODE == 'extranet') {\r
- $onglets = extranetDroits::navigation();\r
- } elseif (MODE == 'ws') {\r
- $onglets = wsDroits::navigation();\r
- }\r
- }\r
- $res = '<div id="nav">';\r
- foreach($onglets as $titre => $url) {\r
- // Si cet onglet correspond à la page active, on le place actif\r
- $active = ($args[0] == $url)?' class="active"':'';\r
- $res.='<a href="' . SITE_PATH . $url . '">'.cubeMedia::cssRollover($core->typo->Onglet($titre,'',false)).'</a>';\r
- }\r
- $res .= '</div>';\r
- return $res;\r
- }\r
-\r
- public static function barre($filtres = null, $action = null, $dashboard = null, $shortcuts = null)\r
- {\r
- if (is_null($shortcuts) && is_null($filtres)) {\r
- return '<div id="bar" class="vide"></div>';\r
- }\r
-\r
- $res = '<div id="bar">';\r
- $res .= '<div class="content">';\r
-\r
- if (!is_null($shortcuts)) {\r
- $res .= self::shortcuts($shortcuts);\r
- }\r
-\r
- if (!is_null($filtres) && is_array($filtres)) {\r
- $res .= '<form action="' . $action . '" method="post" class="submitonchange">';\r
- $hasRealFilters = false;\r
- foreach($filtres as $filtre) {\r
- $res .= $filtre->display();\r
- if ($filtre instanceof extranetFiltre) {\r
- $hasRealFilters = true;\r
- }\r
- }\r
- if ($hasRealFilters) {\r
- $res .= '<div class="efface_filtres"><a href="#" class="ajax" id="efface_filtres" rel="' . $action . '/efface">' . __('Effacer les filtres') . '</a><br /><a href="#" class="popup" rel="formDashboard/' . $dashboard . '">' . __('Ajouter à mon tableau de bord') . '</a></div>';\r
- }\r
- $res .= '</form>';\r
- }\r
- $res .= '</div>';\r
- $res .= '</div>';\r
- return $res;\r
- }\r
-\r
- public static function shortcuts($shortcuts)\r
- {\r
- global $core;\r
-\r
- $res = '';\r
- foreach($shortcuts as $s) {\r
- $res .= '<div class="shortcut">' . $s . '</div>';\r
- }\r
- return $res;\r
- }\r
-\r
- public static function tMain($id = null, $big = false)\r
- {\r
- $id = is_null($id)?'':' id="' . $id . '"';\r
- $big = $big?' class="big"':'';\r
- return '<div id="main"' . $big . '><div id="logo-main"></div><div class="content"' . $id . '>';\r
- }\r
-\r
- public static function bh($class = null)\r
- {\r
- $class = is_null($class)?' class="b"':' class="b ' . $class . '"';\r
-\r
- $res = '<table' . $class . '>';\r
- $res .= '<tr class="b-top">';\r
- $res .= '<td class="b-nw"></td><td class="b-n"></td><td class="b-ne"></td>';\r
- $res .= '</tr>';\r
- $res .= '<tr class="b-center">';\r
- $res .= '<td class="b-w"></td><td class="b-c c"><div>';\r
- return $res;\r
- }\r
-\r
- public static function bf($max=false)\r
- {\r
- $res = '</div></td><td class="b-e"></td>';\r
- $res .= '</tr>';\r
- $res .= '<tr class="b-footer">';\r
- $res .= '<td class="b-sw"></td><td class="b-s">';\r
- if($max){\r
- $res.=cubeMedia::spacer(960,1);\r
- }\r
- $res.='</td><td class="b-se"></td>';\r
- $res .= '</tr>';\r
- $res .= '</table>';\r
- return $res;\r
- }\r
-\r
- public static function pager($current, $nb, $par_page, $url)\r
- {\r
- $style = 'pgleft';\r
- if ($par_page == 0 || $nb <= $par_page) {\r
- return;\r
- }\r
- $par_groupe = 10;\r
- $pager = new cubePager($current, $nb, $par_page, $par_groupe);\r
- $pager->html_link_sep = ' ';\r
- $pager->html_prev = '«';\r
- $pager->html_next = '»';\r
-\r
- $pager->base_url = '#" rel="' . $url . '" class="ajax';\r
-\r
- $links = $pager->getLinks();\r
- if (trim($links) == '') {\r
- return '';\r
- }\r
-\r
- $res = '<div class="pager-holder ' . $style . '"><div class="pager ' . $style . '">';\r
- $res .= $links;\r
- $res .= '</div></div>';\r
-\r
- return $res;\r
- }\r
-\r
- public static function bMain()\r
- {\r
- return '</div></div>';\r
- }\r
-\r
- public static function footer()\r
- {\r
- $res = '<div id="footer"></div>';\r
- $res .= cubePage::googleAnalytics(GA);\r
- $res .= '</body>';\r
- $res .= '</html>';\r
- return $res;\r
- }\r
-}\r
-\r
-?>
\ No newline at end of file
+++ /dev/null
-<?php\r
-\r
-class extranetShortcuts {\r
- public $titre;\r
- public $values;\r
- public $selectedValue;\r
-\r
- public function __construct($titre, $values,$selectedValue)\r
- {\r
- $this->titre = $titre;\r
- $this->values = $values;\r
- $this->selectedValue=$selectedValue;\r
- }\r
-\r
- public function display()\r
- {\r
- // $limit = 20;\r
- // $t = (mb_strlen($titre) > $limit)?mb_substr($titre, 0, $limit-4) . '...':$titre;\r
- $res = '<div class="filtre">';\r
- $res .= '<span>' . $this->titre . '</span>';\r
- $res .= '<div class="input"><span><strong>'.$this->selectedValue.'</strong></span>' ;\r
- $res .= '<a href="#" class="bt" title="' . $this->titre . '">' . cubeMedia::spacer(155, 18) . '</a>';\r
- $res .= '</div>';\r
- $res .= '<ul>';\r
- $last = count($this->values)-1;\r
- $i = 0;\r
- foreach($this->values as $v => $k) {\r
- $l = ($i == $last)?' class="last"':'';\r
- $res .= '<li' . $l . '>'.cubeMedia::spacer(1,17).'<a href="' . $k . '">' . $v . '</a></li>';\r
- $i++;\r
- }\r
- $res .= '</ul>';\r
- $res .= '</div>';\r
- return $res;\r
- }\r
-}\r
-\r
-?>
\ No newline at end of file
require_once(dirname(__FILE__) . '/config.inc.php');\r
// Chargement de la classe cube\r
require_once(dirname(__FILE__) . '/cube/_common.php');\r
+// Inclusion des classes communes\r
+require_once(dirname(__FILE__) . '/commons/_common.php');\r
// Inclusion des classes propres à l'extranet et à la DAO\r
require_once(dirname(__FILE__) . '/extranet/Metier/_common.php');\r
require_once(dirname(__FILE__) . '/extranet/Controlleur/_common.php');\r
$GLOBALS['ajaxClasses'][] = 'extranetAjax';\r
}\r
// Instantiation de la classe de contrôle\r
-$core = new extranetCore();\r
+$core = new commonCore();\r
// Définition des handlers des urls\r
$core->url->registerDefault(array('extranetUrl', 'home'));\r
$core->url->register('ajax', 'ajax', '^ajax(.*)$', array('cubeAjax', 'ajax'));\r