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