From: vincent@cubedesigners.com Date: Wed, 23 Oct 2019 14:41:22 +0000 (+0000) Subject: fix #3086 @0.75 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=ea6cda44d0f4729031a6e25eddaf33dcf9db803a;p=cubeextranet.git fix #3086 @0.75 --- diff --git a/inc/commons/class.common.url.php b/inc/commons/class.common.url.php index 8e8d501f4..1d21ff1d5 100644 --- a/inc/commons/class.common.url.php +++ b/inc/commons/class.common.url.php @@ -1,483 +1,506 @@ user) || !$core->user)) { - $args = array('login'); - } else { - if (isset($args[0]) && $args[0] == 'login') { - http::redirect('/'); - } - if (!count($args)) { - // Page par défaut (premier onglet) - if (MODE == 'extranet') { - $nav = extranetDroits::navigation(); - } elseif (MODE == 'ws') { - $nav = wsDroits::navigation(); - } - foreach ($nav as $titre => $url) { - $args = array($url); - break; - } - } - } - - $f = $args[0]; - - $classes = array(MODE . 'Url', 'commonUrl'); - - if (!isset($_GET['light'])) { - echo commonPage::header($args); - } - - foreach ($classes as $class) { - $cb = array($class, $f); - if (is_callable($cb)) { - echo call_user_func($cb, $args); - break; - } - } - if (!isset($_GET['light'])) { - echo commonPage::footer(); - } - } - - public static function login($args) { - global $core; - $core->con->select('SELECT 2'); - - $tentative = isset($_SESSION['errorLogin']) && $_SESSION['errorLogin']; - if ($tentative) { - $_SESSION['errorLogin'] = false; - } - - $message = $tentative ? '


' . __('Identifiants incorrects') . '

' : ''; - - $res = commonPage::barre(); - $res .= commonPage::tMain(); - $res .= commonPage::bh('login'); - $res .= '
'; - $res .= '
'; - $res .= '

' . __('Veuillez vous identifier') . '

'; - $res .= $message; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= '
' . __('Votre e-mail ou login') . ' : ' . cubeForm::email('user_email', 20, 64, '') . '
' . __('Votre mot de passe') . ' : ' . form::password('user_password', 20, 64, '') . '
' . __('Mot de passe oublié ? Cliquez ici') . '
' . $core->typo->BoutonOK('Cliquez-ici pour vous identifier') . '
'; - $res .= '
'; - $res .= '
'; - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - return $res; - } - - public static function logout($args) { - if (isset($_SESSION['user_email'])) { - unset($_SESSION['user_email']); - } - if (isset($_SESSION['password_email'])) { - unset($_SESSION['password_email']); - } - http::redirect(SITE_PATH); - } - - public static function motdepasseOublie($args) { - return '' . __('Entrez votre e-mail') . ' : ' . cubeForm::email('email', 30, 128) . ''; - } - - public static function mesParametres($args) { - global $core; - $utilisateur = $core->user; - - $res = 'Mot de passe :Changer mon mot de passe'; - $res .= 'Login :' . form::field('login', 20, 64, $utilisateur->login) . ''; - $res .= 'Langue de l\'interface :' . form::combo('lang', cubeLang::getAvailableLangs(true), $utilisateur->lang) . ''; - $res .= '' . $core->typo->BoutonOK(__('Enregister')) . ''; - if ($utilisateur instanceof commonClient) { - $res .= ''; - $res .= '' . __('Mes informations') . ''; - $res .= '' . __('Numéro de client') . ' : ' . $utilisateur->utilisateur_id . ''; - $res .= '' . __('Prénom') . ' : ' . $utilisateur->prenom . ''; - $res .= '' . __('Nom') . ' : ' . $utilisateur->nom . ''; - $res .= '' . __('Adresse e-mail') . ' : ' . $utilisateur->email . ''; - $res .= '' . __('Raison sociale') . ' : ' . $utilisateur->rs . ''; - $res .= '' . __('Adresse') . ' : ' . nl2br($utilisateur->adresse) . '
' . $utilisateur->code_postal . ' ' . $utilisateur->ville . '
' . cubeCountry::getCountry($utilisateur->pays) . ''; - $res .= '' . __('Numéro de téléphone') . ' : ' . $utilisateur->telephone . ''; - $res .= '' . __('Numéro de mobile') . ' : ' . $utilisateur->mobile . ''; - $res .= '' . __('Numéro de fax') . ' : ' . $utilisateur->fax . ''; - $res .= '' . __('Numéro de TVA intracommunautaire') . ' : ' . $utilisateur->tva_intra . ''; - $res .= '' . __('Si les informations ci-dessus sont incomplètes ou erronées, veuillez nous
en informer en nous écrivant à ') . '' . FROM_EMAIL . '
'; - } - - return $res; - } - - public static function changeMotdepasse() { - $res = '' . __('Votre mot de passe doit comprendre en 6 et 10 caractères') . ''; - $res .= '' . __('Tapez votre mot de passe actuel') . ' : ' . form::password('actuel', 20, 10) . ''; - $res .= '' . __('Tapez votre nouveau mot de passe') . ' : ' . form::password('nouveau', 20, 10) . ''; - $res .= '' . __('Confirmez votre nouveau mot de passe') . ' : ' . form::password('confirmation', 20, 10) . ''; - return $res; - } - - public static function orderby($label, $field, $settings, $function, $title = '') { - $res = ''; - $res .= $label; - if ($settings['orderby'] == $field) { - $puce = ($settings['sens'] == 'DESC') ? 'down' : 'up'; - $res .= ' ' . cubeMedia::image(IMG . '/' . $puce . '.png'); - } - $res .= ''; - return $res; - } - - public static function formParPage($action, $value, $nom = 'éléments', $all = true) { - $values = array(2, 5, 10, 15, 25, 50, 100); - if ($all) { - $datas = array(__('Tous les ') . $nom => 0); - } else { - $datas = array(); - } - foreach ($values as $v) { - $datas[$v . ' ' . $nom] = $v; - } - - $res = '
'; - $res .= '
' . __('Afficher') . ' : ' . form::combo(array('par_page'), $datas, $value) . ' ' . __('par page') . '
'; - $res .= '
' . cubeMedia::spacer(950, 1) . '
'; - $res .= '
'; - return $res; - } - - public static function autocomplete($args) { - global $core; - - fb('!!!!'); - - if (isset($_GET['q'])) { - $args[2] = $_GET['q']; - } - $q = mb_strtolower(cubeText::removeAccents($args[2])); - $suggestions = array(); - if ($args[1] == 'client') { - $dao = new commonDAOClient($core->con); - $dao->setSearch($q, true); - $clients = $dao->getListe(); - foreach ($clients as $client) { - $suggestions[] = $client->utilisateur_id . ' - ' . $client->rs . ' (' . $client->prenom . ' ' . $client->nom . ')'; - } - } elseif ($args[1] == 'projet') { - $dao = new extranetDAOProjet($core->con); - $dao->setSearch($q, true); - $projets = $dao->getListe(); - foreach ($projets as $projet) { - $suggestions[] = $projet->projet_id . ' - ' . $projet->nom . ' (' . $projet->client . ')'; - } - } elseif ($args[1] == 'book') { - $dao = new wsDAOBook($core->con); - $dao->setSearch($q, true); - $books = $dao->getListe('date', 'DESC', 15, $core->user); - foreach ($books as $book) { - $suggestions[] = $book->book_id . ' - ' . $book->nom; - } - } elseif ($args[1] == 'wsuser') { - $dao = new commonDAOUtilisateur($core->con); - $dao->setSearch($q, true); - $clients = $dao->getListe('utilisateur_id', 'ASC', null, ' AND ws_grade>0', $core->user); - foreach ($clients as $client) { - $suggestions[] = $client->utilisateur_id . ' - ' . $client->rs . ' (' . $client->prenom . ' ' . $client->nom . ')'; - } - } elseif ($args[1] == 'wsadmin') { - $dao = new commonDAOUtilisateur($core->con); - $dao->setSearch($q, true); - $clients = $dao->getListe('utilisateur_id', 'ASC', null, 'AND ws_grade>2', $core->user); - foreach ($clients as $client) { - $suggestions[] = $client->utilisateur_id . ' - ' . $client->rs . ' (' . $client->prenom . ' ' . $client->nom . ')'; - } - } - cubeSearch::searchSuggestion($args[2], $suggestions); - exit; - } - - public static function dashboard($args) { - commonDroits::dashboard(); - - cubePage::ui('Sortable'); - $res = commonPage::barre(); - $res .= commonPage::tMain('dash'); - $res .= commonUrl::listeDashboard($args); - $res .= commonPage::bMain(); - return $res; - } - - public static function listeDashboard($args) { - commonDroits::dashboard(); - global $core; - $r = $core->con->select('SELECT * FROM dashboard WHERE equipier=\'' . $core->user->utilisateur_id . '\' AND site=\'' . MODE . '\' ORDER BY sort'); - $res = ''; - while ($r->fetch()) { - $res .= '
'; - $res .= commonUrl::displayDashboard($r); - $res .= '
'; - } - return $res; - } - - public static function displayDashboard($r) { - commonDroits::dashboard(); - global $core; - $res = '
' . $core->typo->OngletBlanc($r->nom); - - $close = ($r->state == '0') ? ' close' : ''; - $hide = ($r->state == '0') ? ' class="close"' : ''; - - $res .= '' . cubeMedia::spacer(18, 10) . ''; - $res .= '' . cubeMedia::image(IMG . '/edit.png') . ''; - $res .= '' . cubeMedia::image(IMG . '/delete.png') . ''; - $res .= '
'; - $res .= commonPage::bh(); - $res .= ''; - - if ($r->rubrique == 'projets') { - $res .= extranetUrl::listeProjets($r->dashboard_id, self::getDashboardSettings($r->settings)); - } elseif ($r->rubrique == 'factures') { - $res .= extranetUrl::listeFactures($r->dashboard_id, self::getDashboardSettings($r->settings)); - } elseif ($r->rubrique == 'devis') { - $res .= extranetUrl::listeDevis($r->dashboard_id, self::getDashboardSettings($r->settings)); - } elseif ($r->rubrique == 'clients' && MODE == 'extranet') { - $res .= extranetUrl::listeClients($r->dashboard_id, self::getDashboardSettings($r->settings)); - } elseif ($r->rubrique == 'timereport') { - $res .= extranetUrl::listeTimereport($r->dashboard_id, self::getDashboardSettings($r->settings)); - } elseif ($r->rubrique == 'demandes') { - $res .= wsUrl::listeDemandes($r->dashboard_id, self::getDashboardSettings($r->settings)); - } elseif ($r->rubrique == 'books') { - $res .= wsUrl::listeBooks($r->dashboard_id, self::getDashboardSettings($r->settings)); - } - $res .= ''; - $res .= commonPage::bf(); - - return $res; - } - - public static function getDashboardSettings($s) { - commonDroits::dashboard(); - $s = unserialize($s); - if (isset($s['filtres']['annee'])) { - $s['filtres']['annee'] = range(2006, date('Y'), 1); - } - return $s; - } - - public static function formDashboard($args) { - commonDroits::dashboard(); - global $core; - $rub = $args[1]; - $dashboard_id = isset($args[2]) ? $args[2] : 'new'; - - if ($dashboard_id == 'new') { - $res = 'Titre de la liste' . form::field('nom', 20, 128, false) . form::hidden('rubrique', $rub) . form::hidden('dashboard_id', $dashboard_id) . ''; - } else { - $r = $core->con->select('SELECT * FROM dashboard WHERE dashboard_id=\'' . $core->con->escape($dashboard_id) . '\''); - $res = 'Titre de la liste' . form::field('nom', 20, 128, $r->nom) . form::hidden('dashboard_id', $dashboard_id) . ''; - } - - return $res; - } - - public static function fichiers($args) { - global $core; - - commonDroits::min(array('extranet' => 0, 'ws' => 1)); - - $settings = $core->user->getSettings('fichiers'); - if ($core->user->ws_grade > 0 && isset($args[1])) { - $dao = new commonDAOClient($core->con); - $client = $dao->selectById($args[1]); - fb($client); - $_SESSION['entreprise_fichiers'] = $client->entreprise; - } else { - unset($_SESSION['entreprise_fichiers']); - } - - $shortcuts = array(); - // $shortcuts[] = '' . $core->typo->Ajouter('Créer un projet') . ''; - $filtres = array(); - $res = ''; - - $res .= commonPage::barre(); - - $res .= commonPage::tMain(); - if ($core->user->grade == 0) { - $res .= self::formFichier(); - } else { - $res .= self::formFichier($args[1]); - } - $res .= commonPage::bh(); - $res .= '
'; - $res .= self::listeFichiers($settings); - $res .= '
'; - $res .= commonPage::bf(); - $res .= commonPage::bMain(); - return $res; - } - - public static function formFichier($for = 'client') { - global $core; - - if ($for == 'client') { - $titre = __('Envoyez-nous un fichier'); - $texte = __('Cliquez sur le bouton Parcourir, et sélectionnez le ou les fichiers que vous souhaitez nous faire parvenir'); - } else { - $dao = new commonDAOClient($core->con); - $client = $dao->selectById($for); - $titre = __('Envoyer un fichier à') . ' ' . $client->prenom . ' ' . $client->nom; - $texte = ''; - } - - $res = '
'; - $res .= '
' . $core->typo->OngletBlancNoDash($titre) . '
'; - $res .= commonPage::bh(); - $res .= '
'; - $res .= '

' . $texte . '

'; - - - if ($for == 'client') { - $action = SITE_PATH . 'upload'; - } else { - - $action = SITE_PATH . 'upload/' . $for; - } - $res .= '
'; - $res .= ''; - $res .= '
Veuillez sélectionner un ou plusieurs fichier
' . __('Parcourir') . '...'; - $res .= '
'; - $res .= '
'; - $res .= commonPage::bf(); - $res .= '
'; - return $res; - } - - public static function listeFichiers($settings = null) { - commonDroits::min(array('extranet' => 0, 'ws' => 1)); - - global $core; - if ($core->user->ws_grade <= 0 && isset($_SESSION['entreprise_fichiers'])) { - $entreprise = $core->user->entreprise; - } else { - $entreprise = $_SESSION['entreprise_fichiers']; - } - - $settings = is_null($settings) ? $core->user->getSettings('fichiers') : $settings; - $dao = new commonDAOFichier($core->con); - $change = 'Fichiers'; - $dao->entreprise_id = $entreprise; - if (isset($settings['search']) && !is_null($settings['search'])) { - $dao->setSearch($settings['search']); - } - $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']); - - $res = ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $i = 0; - foreach ($liste as $fichier) { - $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - $res .= ''; - if ($fichier->destinataire) { - $res .= ''; - } else { - $res .= ''; - } - $res .= ''; - $res .= ''; - $res .= ''; - $i++; - } - if (!isset($settings['search']) || is_null($settings['search'])) { - $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; - $res .= ''; - } - $res .= '
' . commonUrl::orderby(__('Nom de fichier'), 'nom', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Type'), 'type', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Taille'), 'taille', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Date'), 'date', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Envoyé par'), 'contact', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Destiné à'), 'destinataire', $settings, 'sort' . $change) . '
' . $fichier->nom . '' . $fichier->type . '' . files::size($fichier->taille) . '' . date(__('d/m/Y'), $fichier->date) . '' . $fichier->contact->prenom . ' ' . $fichier->contact->nom . '' . $fichier->destinataire->prenom . ' ' . $fichier->destinataire->nom . '' . self::telechargerLink($fichier) . '' . cubeMedia::image(IMG . '/delete.png') . '
'; - $res .= commonPage::pager($settings['page'], $dao->count(), $settings['par_page'], 'page' . $change . '/%d'); - $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('fichiers')); - $res .= '
'; - return $res; - } - - public static function telechargerLink($fichier) { - global $core; - $ext = files::getExtension($fichier->relPath); - - $res = ''; - if ($ext == 'ipa') { - $res .= '' . $core->typo->Telecharger('Installer') . ' '; - } - $res .= '' . $core->typo->Telecharger('Télécharger') . ''; - return $res; - } - - public static function manifestFromIpa($fichier) { - $path = '/cache/iosotamanifest/' . sha1($fichier->relPath) . '/'; - $webpath = SCHEME . '://' . $_SERVER['HTTP_HOST'] . $path; - $filepath = ROOT . $path; - - if (!file_exists($filepath)) { - mkdir($filepath, 0777, true); - } - - $res = $webpath . 'manifest.plist'; - $file = $filepath . 'manifest.plist'; - $tmp = $file . '.info'; - $ipa = $fichier->chemin; - - if (true || !file_exists($file) || filemtime($ipa) > filemtime($file)) { - $zip = new ZipArchive(); - $zip->open($fichier->chemin); - for ($i = 0; $i < $zip->numFiles; $i++) { - $filename = $zip->getNameIndex($i); - if (preg_match('|Payload/\S+.app/Info.plist|', $filename, $matches)) { - $idx = $i; - break; - } - } - $info = $zip->getFromIndex($idx); - - file_put_contents($tmp, $info); - - - require_once(ROOT . '/inc/cube/externals/CFPropertyList/CFPropertyList.php'); - $plist = new CFPropertyList\CFPropertyList($tmp); - - $infos = $plist->toArray(); - - $protocol = 'https'; - - $bundle = $infos['CFBundleIdentifier']; - $appName = $infos['CFBundleDisplayName']; - $version = $infos['CFBundleVersion']; - $ipaURL = $protocol . '://' . $_SERVER['HTTP_HOST'] . '/telechargerr/' . self::hashFile($fichier->relPath . '//') . '/' . $fichier->relPath; - - $xml = ' +class commonUrl +{ + + public static function hub($args) + { + global $core; + $args = cubePage::getArgs($args); + // Si l'utilisateur n'est pas connecté, on affiche le formulaire + // de login + + $bypass = array('stats', 'telecharger', 'telechargerr', 'orpiref'); + + if ((!isset($args[0]) || !in_array($args[0], $bypass)) && (is_null($core->user) || !$core->user)) { + $args = array('login'); + } else { + if (isset($args[0]) && $args[0] == 'login') { + http::redirect('/'); + } + if (!count($args)) { + // Page par défaut (premier onglet) + if (MODE == 'extranet') { + $nav = extranetDroits::navigation(); + } elseif (MODE == 'ws') { + $nav = wsDroits::navigation(); + } + foreach ($nav as $titre => $url) { + $args = array($url); + break; + } + } + } + + $f = $args[0]; + + $classes = array(MODE . 'Url', 'commonUrl'); + + if (!isset($_GET['light'])) { + echo commonPage::header($args); + } + + foreach ($classes as $class) { + $cb = array($class, $f); + if (is_callable($cb)) { + echo call_user_func($cb, $args); + break; + } + } + if (!isset($_GET['light'])) { + echo commonPage::footer(); + } + } + + public static function login($args) + { + global $core; + $core->con->select('SELECT 2'); + + $tentative = isset($_SESSION['errorLogin']) && $_SESSION['errorLogin']; + if ($tentative) { + $_SESSION['errorLogin'] = false; + } + + $message = $tentative ? '


' . __('Identifiants incorrects') . '

' : ''; + + $res = commonPage::barre(); + $res .= commonPage::tMain(); + $res .= commonPage::bh('login'); + $res .= '
'; + $res .= '
'; + $res .= '

' . __('Veuillez vous identifier') . '

'; + $res .= $message; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= '
' . __('Votre e-mail ou login') . ' : ' . cubeForm::email('user_email', 20, 64, '') . '
' . __('Votre mot de passe') . ' : ' . form::password('user_password', 20, 64, '') . '
' . __('Mot de passe oublié ? Cliquez ici') . '
' . $core->typo->BoutonOK('Cliquez-ici pour vous identifier') . '
'; + $res .= '
'; + $res .= '
'; + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + + public static function logout($args) + { + if (isset($_SESSION['user_email'])) { + unset($_SESSION['user_email']); + } + if (isset($_SESSION['password_email'])) { + unset($_SESSION['password_email']); + } + http::redirect(SITE_PATH); + } + + public static function motdepasseOublie($args) + { + return '' . __('Entrez votre e-mail') . ' : ' . cubeForm::email('email', 30, 128) . ''; + } + + public static function mesParametres($args) + { + global $core; + $utilisateur = $core->user; + + $res = 'Mot de passe :Changer mon mot de passe'; + $res .= 'Login :' . form::field('login', 20, 64, $utilisateur->login) . ''; + $res .= 'Langue de l\'interface :' . form::combo('lang', cubeLang::getAvailableLangs(true), $utilisateur->lang) . ''; + $res .= '' . $core->typo->BoutonOK(__('Enregister')) . ''; + if ($utilisateur instanceof commonClient) { + $res .= ''; + $res .= '' . __('Mes informations') . ''; + $res .= '' . __('Numéro de client') . ' : ' . $utilisateur->utilisateur_id . ''; + $res .= '' . __('Prénom') . ' : ' . $utilisateur->prenom . ''; + $res .= '' . __('Nom') . ' : ' . $utilisateur->nom . ''; + $res .= '' . __('Adresse e-mail') . ' : ' . $utilisateur->email . ''; + $res .= '' . __('Raison sociale') . ' : ' . $utilisateur->rs . ''; + $res .= '' . __('Adresse') . ' : ' . nl2br($utilisateur->adresse) . '
' . $utilisateur->code_postal . ' ' . $utilisateur->ville . '
' . cubeCountry::getCountry($utilisateur->pays) . ''; + $res .= '' . __('Numéro de téléphone') . ' : ' . $utilisateur->telephone . ''; + $res .= '' . __('Numéro de mobile') . ' : ' . $utilisateur->mobile . ''; + $res .= '' . __('Numéro de fax') . ' : ' . $utilisateur->fax . ''; + $res .= '' . __('Numéro de TVA intracommunautaire') . ' : ' . $utilisateur->tva_intra . ''; + $res .= '' . __('Si les informations ci-dessus sont incomplètes ou erronées, veuillez nous
en informer en nous écrivant à ') . '' . FROM_EMAIL . '
'; + } + + return $res; + } + + public static function changeMotdepasse() + { + $res = '' . __('Votre mot de passe doit comprendre en 6 et 10 caractères') . ''; + $res .= '' . __('Tapez votre mot de passe actuel') . ' : ' . form::password('actuel', 20, 10) . ''; + $res .= '' . __('Tapez votre nouveau mot de passe') . ' : ' . form::password('nouveau', 20, 10) . ''; + $res .= '' . __('Confirmez votre nouveau mot de passe') . ' : ' . form::password('confirmation', 20, 10) . ''; + return $res; + } + + public static function orderby($label, $field, $settings, $function, $title = '') + { + $res = ''; + $res .= $label; + if ($settings['orderby'] == $field) { + $puce = ($settings['sens'] == 'DESC') ? 'down' : 'up'; + $res .= ' ' . cubeMedia::image(IMG . '/' . $puce . '.png'); + } + $res .= ''; + return $res; + } + + public static function formParPage($action, $value, $nom = 'éléments', $all = true) + { + $values = array(2, 5, 10, 15, 25, 50, 100); + if ($all) { + $datas = array(__('Tous les ') . $nom => 0); + } else { + $datas = array(); + } + foreach ($values as $v) { + $datas[$v . ' ' . $nom] = $v; + } + + $res = '
'; + $res .= '
' . __('Afficher') . ' : ' . form::combo(array('par_page'), $datas, $value) . ' ' . __('par page') . '
'; + $res .= '
' . cubeMedia::spacer(950, 1) . '
'; + $res .= '
'; + return $res; + } + + public static function autocomplete($args) + { + global $core; + + fb('!!!!'); + + if (isset($_GET['q'])) { + $args[2] = $_GET['q']; + } + $q = mb_strtolower(cubeText::removeAccents($args[2])); + $suggestions = array(); + if ($args[1] == 'client') { + $dao = new commonDAOClient($core->con); + $dao->setSearch($q, true); + $clients = $dao->getListe(); + foreach ($clients as $client) { + $suggestions[] = $client->utilisateur_id . ' - ' . $client->rs . ' (' . $client->prenom . ' ' . $client->nom . ')'; + } + } elseif ($args[1] == 'projet') { + $dao = new extranetDAOProjet($core->con); + $dao->setSearch($q, true); + $projets = $dao->getListe(); + foreach ($projets as $projet) { + $suggestions[] = $projet->projet_id . ' - ' . $projet->nom . ' (' . $projet->client . ')'; + } + } elseif ($args[1] == 'book') { + $dao = new wsDAOBook($core->con); + $dao->setSearch($q, true); + $books = $dao->getListe('date', 'DESC', 15, $core->user); + foreach ($books as $book) { + $suggestions[] = $book->book_id . ' - ' . $book->nom; + } + } elseif ($args[1] == 'wsuser') { + $dao = new commonDAOUtilisateur($core->con); + $dao->setSearch($q, true); + $clients = $dao->getListe('utilisateur_id', 'ASC', null, ' AND ws_grade>0', $core->user); + foreach ($clients as $client) { + $suggestions[] = $client->utilisateur_id . ' - ' . $client->rs . ' (' . $client->prenom . ' ' . $client->nom . ')'; + } + } elseif ($args[1] == 'wsadmin') { + $dao = new commonDAOUtilisateur($core->con); + $dao->setSearch($q, true); + $clients = $dao->getListe('utilisateur_id', 'ASC', null, 'AND ws_grade>2', $core->user); + foreach ($clients as $client) { + $suggestions[] = $client->utilisateur_id . ' - ' . $client->rs . ' (' . $client->prenom . ' ' . $client->nom . ')'; + } + } + cubeSearch::searchSuggestion($args[2], $suggestions); + exit; + } + + public static function dashboard($args) + { + commonDroits::dashboard(); + + cubePage::ui('Sortable'); + $res = commonPage::barre(); + $res .= commonPage::tMain('dash'); + $res .= commonUrl::listeDashboard($args); + $res .= commonPage::bMain(); + return $res; + } + + public static function listeDashboard($args) + { + commonDroits::dashboard(); + global $core; + $r = $core->con->select('SELECT * FROM dashboard WHERE equipier=\'' . $core->user->utilisateur_id . '\' AND site=\'' . MODE . '\' ORDER BY sort'); + $res = ''; + while ($r->fetch()) { + $res .= '
'; + $res .= commonUrl::displayDashboard($r); + $res .= '
'; + } + return $res; + } + + public static function displayDashboard($r) + { + commonDroits::dashboard(); + global $core; + $res = '
' . $core->typo->OngletBlanc($r->nom); + + $close = ($r->state == '0') ? ' close' : ''; + $hide = ($r->state == '0') ? ' class="close"' : ''; + + $res .= '' . cubeMedia::spacer(18, 10) . ''; + $res .= '' . cubeMedia::image(IMG . '/edit.png') . ''; + $res .= '' . cubeMedia::image(IMG . '/delete.png') . ''; + $res .= '
'; + $res .= commonPage::bh(); + $res .= ''; + + if ($r->rubrique == 'projets') { + $res .= extranetUrl::listeProjets($r->dashboard_id, self::getDashboardSettings($r->settings)); + } elseif ($r->rubrique == 'factures') { + $res .= extranetUrl::listeFactures($r->dashboard_id, self::getDashboardSettings($r->settings)); + } elseif ($r->rubrique == 'devis') { + $res .= extranetUrl::listeDevis($r->dashboard_id, self::getDashboardSettings($r->settings)); + } elseif ($r->rubrique == 'clients' && MODE == 'extranet') { + $res .= extranetUrl::listeClients($r->dashboard_id, self::getDashboardSettings($r->settings)); + } elseif ($r->rubrique == 'timereport') { + $res .= extranetUrl::listeTimereport($r->dashboard_id, self::getDashboardSettings($r->settings)); + } elseif ($r->rubrique == 'demandes') { + $res .= wsUrl::listeDemandes($r->dashboard_id, self::getDashboardSettings($r->settings)); + } elseif ($r->rubrique == 'books') { + $res .= wsUrl::listeBooks($r->dashboard_id, self::getDashboardSettings($r->settings)); + } + $res .= ''; + $res .= commonPage::bf(); + + return $res; + } + + public static function getDashboardSettings($s) + { + commonDroits::dashboard(); + $s = unserialize($s); + if (isset($s['filtres']['annee'])) { + $s['filtres']['annee'] = range(2006, date('Y'), 1); + } + return $s; + } + + public static function formDashboard($args) + { + commonDroits::dashboard(); + global $core; + $rub = $args[1]; + $dashboard_id = isset($args[2]) ? $args[2] : 'new'; + + if ($dashboard_id == 'new') { + $res = 'Titre de la liste' . form::field('nom', 20, 128, false) . form::hidden('rubrique', $rub) . form::hidden('dashboard_id', $dashboard_id) . ''; + } else { + $r = $core->con->select('SELECT * FROM dashboard WHERE dashboard_id=\'' . $core->con->escape($dashboard_id) . '\''); + $res = 'Titre de la liste' . form::field('nom', 20, 128, $r->nom) . form::hidden('dashboard_id', $dashboard_id) . ''; + } + + return $res; + } + + public static function fichiers($args) + { + global $core; + + commonDroits::min(array('extranet' => 0, 'ws' => 1)); + + $settings = $core->user->getSettings('fichiers'); + if ($core->user->ws_grade > 0 && isset($args[1])) { + $dao = new commonDAOClient($core->con); + $client = $dao->selectById($args[1]); + fb($client); + $_SESSION['entreprise_fichiers'] = $client->entreprise; + } else { + unset($_SESSION['entreprise_fichiers']); + } + + $shortcuts = array(); + // $shortcuts[] = '' . $core->typo->Ajouter('Créer un projet') . ''; + $filtres = array(); + $res = ''; + + $res .= commonPage::barre(); + + $res .= commonPage::tMain(); + if ($core->user->grade == 0) { + $res .= self::formFichier(); + } else { + $res .= self::formFichier($args[1]); + } + $res .= commonPage::bh(); + $res .= '
'; + $res .= self::listeFichiers($settings); + $res .= '
'; + $res .= commonPage::bf(); + $res .= commonPage::bMain(); + return $res; + } + + public static function formFichier($for = 'client') + { + global $core; + + if ($for == 'client') { + $titre = __('Envoyez-nous un fichier'); + $texte = __('Cliquez sur le bouton Parcourir, et sélectionnez le ou les fichiers que vous souhaitez nous faire parvenir'); + } else { + $dao = new commonDAOClient($core->con); + $client = $dao->selectById($for); + $titre = __('Envoyer un fichier à') . ' ' . $client->prenom . ' ' . $client->nom; + $texte = ''; + } + + $res = '
'; + $res .= '
' . $core->typo->OngletBlancNoDash($titre) . '
'; + $res .= commonPage::bh(); + $res .= '
'; + $res .= '

' . $texte . '

'; + + + if ($for == 'client') { + $action = SITE_PATH . 'upload'; + } else { + + $action = SITE_PATH . 'upload/' . $for; + } + $res .= '
'; + $res .= ''; + $res .= '
Veuillez sélectionner un ou plusieurs fichier
' . __('Parcourir') . '...'; + $res .= '
'; + $res .= '
'; + $res .= commonPage::bf(); + $res .= '
'; + return $res; + } + + public static function listeFichiers($settings = null) + { + commonDroits::min(array('extranet' => 0, 'ws' => 1)); + + global $core; + if ($core->user->ws_grade <= 0 && isset($_SESSION['entreprise_fichiers'])) { + $entreprise = $core->user->entreprise; + } else { + $entreprise = $_SESSION['entreprise_fichiers']; + } + + $settings = is_null($settings) ? $core->user->getSettings('fichiers') : $settings; + $dao = new commonDAOFichier($core->con); + $change = 'Fichiers'; + $dao->entreprise_id = $entreprise; + if (isset($settings['search']) && !is_null($settings['search'])) { + $dao->setSearch($settings['search']); + } + $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']); + + $res = ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $i = 0; + foreach ($liste as $fichier) { + $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + $res .= ''; + if ($fichier->destinataire) { + $res .= ''; + } else { + $res .= ''; + } + $res .= ''; + $res .= ''; + $res .= ''; + $i++; + } + if (!isset($settings['search']) || is_null($settings['search'])) { + $odd = cubeMath::isOdd($i) ? ' class="odd"' : ''; + $res .= ''; + } + $res .= '
' . commonUrl::orderby(__('Nom de fichier'), 'nom', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Type'), 'type', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Taille'), 'taille', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Date'), 'date', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Envoyé par'), 'contact', $settings, 'sort' . $change) . '' . commonUrl::orderby(__('Destiné à'), 'destinataire', $settings, 'sort' . $change) . '
' . $fichier->nom . '' . $fichier->type . '' . files::size($fichier->taille) . '' . date(__('d/m/Y'), $fichier->date) . '' . $fichier->contact->prenom . ' ' . $fichier->contact->nom . '' . $fichier->destinataire->prenom . ' ' . $fichier->destinataire->nom . '' . self::telechargerLink($fichier) . '' . cubeMedia::image(IMG . '/delete.png') . '
'; + $res .= commonPage::pager($settings['page'], $dao->count(), $settings['par_page'], 'page' . $change . '/%d'); + $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('fichiers')); + $res .= '
'; + return $res; + } + + public static function telechargerLink($fichier) + { + global $core; + $ext = files::getExtension($fichier->relPath); + + $res = ''; + if ($ext == 'ipa') { + $res .= '' . $core->typo->Telecharger('Installer') . ' '; + } + $res .= '' . $core->typo->Telecharger('Télécharger') . ''; + return $res; + } + + public static function manifestFromIpa($fichier) + { + $path = '/cache/iosotamanifest/' . sha1($fichier->relPath) . '/'; + $webpath = SCHEME . '://' . $_SERVER['HTTP_HOST'] . $path; + $filepath = ROOT . $path; + + if (!file_exists($filepath)) { + mkdir($filepath, 0777, true); + } + + $res = $webpath . 'manifest.plist'; + $file = $filepath . 'manifest.plist'; + $tmp = $file . '.info'; + $ipa = $fichier->chemin; + + if (!file_exists($file) || filemtime($ipa) > filemtime($file)) { + $zip = new ZipArchive(); + $zip->open($fichier->chemin); + for ($i = 0; $i < $zip->numFiles; $i++) { + $filename = $zip->getNameIndex($i); + if (preg_match('|Payload/(.+).app/Info.plist|', $filename, $matches)) { + $idx = $i; + break; + } + } + if (!$idx) { + return; + } + $info = $zip->getFromIndex($idx); + + file_put_contents($tmp, $info); + + + require_once(ROOT . '/inc/cube/externals/CFPropertyList/CFPropertyList.php'); + $plist = new CFPropertyList\CFPropertyList($tmp); + + $infos = $plist->toArray(); + + $protocol = 'https'; + + $bundle = $infos['CFBundleIdentifier']; + $appName = $infos['CFBundleDisplayName']; + $version = $infos['CFBundleVersion']; + $ipaURL = $protocol . '://' . $_SERVER['HTTP_HOST'] . '/telechargerr/' . self::hashFile($fichier->relPath . '//') . '/' . $fichier->relPath; + + $xml = ' @@ -521,152 +544,157 @@ class commonUrl { '; - file_put_contents($file, $xml); - unlink($tmp); - } - return str_replace('http://', 'https://', $res); - } - - public static function hashFile($path) { - $path = trim($path, '/'); - return sha1('!!//' . $path . '||--'); - } - - public static function telechargerr($args) { - return self::telecharger($args, true); - } - - public static function telecharger($args, $relay = false) { - array_shift($args); - $hash = array_shift($args); - $path = implode('/', $args); - $utilisateur_id = array_shift($args); - $nom = array_pop($args); - - $verihash = self::hashFile($path); - if ($hash != $verihash) { - return; - } - - cubeHTTP::xsendFile(FTPROOT . $path, false, true); - } - - public static function upload($args) { - global $core; - - commonDroits::min(array('extranet' => 0, 'ws' => 1)); - - if (isset($args[1]) && $args[1] != '') { - $for = $args[1]; - } else { - $for = false; - } - - if (!$for) { - $destrel = $core->user->utilisateur_id; - } else { - $destrel = $for . '/.in/' . $core->user->utilisateur_id; - } - $dest = FTPROOT . $destrel; - if (!file_exists($dest)) { - mkdir($dest, 0755, true); - } - - $files_uploaded = array(); - - print_r($_FILES); - - - foreach ($_FILES['files']['name'] as $k => $ffname) { - if ($_FILES['files']['error'][$k]) { - continue; - } - $fname = cubeFiles::tidyName($ffname); - while (file_exists($dest . '/' . $fname)) { - $name = cubeFiles::getName($fname); - $ext = files::getExtension($fname); - - $name .= '.' . rand(1, 9); - $fname = $name . '.' . $ext; - } - - move_uploaded_file($_FILES['files']['tmp_name'][$k], $dest . '/' . $fname); - $files_uploaded[] = $destrel . '/' . $fname; - } - - if (count($files_uploaded) > 0) { - $mail = new cubeMail(); - $mail->charset = 'UTF-8'; - $mail->from = FROM_NAME . '<' . FROM_EMAIL . '>'; - if (!$for) { - $mail->to = TEAM_EMAIL; - $mail->subject = '[' . EMAIL_SUBJECT . '] Nouveaux fichiers uploadés par ' . $core->user->prenom . ' ' . $core->user->nom; - $body = 'Tous les fichiers de ' . $core->user->prenom . ' ' . $core->user->nom . ' : https://' . $_SERVER['HTTP_HOST'] . '/fichiers/' . $core->user->utilisateur_id . "\n\n"; - $body .= 'Fichiers chargés : ' . "\n"; - foreach ($files_uploaded as $f) { - $body .= ' - https://' . $_SERVER['HTTP_HOST'] . '/telecharger/' . $f . "\n"; - } - } else { - $dao = new commonDAOClient($core->con); - $client = $dao->selectById($for); - - $mail->to = $core->user->email; - $mail->subject = '[' . EMAIL_SUBJECT . '] Nouveaux fichiers uploadés pour ' . $client->prenom . ' ' . $client->nom; - - $body = 'Tous les fichiers de ' . $client->prenom . ' ' . $client->nom . ' : https://' . $_SERVER['HTTP_HOST'] . '/fichiers/' . $client->utilisateur_id . "\n\n"; - $body .= 'Fichiers chargés : ' . "\n"; - foreach ($files_uploaded as $f) { - $body .= ' - https://' . $_SERVER['HTTP_HOST'] . '/telecharger/' . commonUrl::hashFile($f) . '/' . $f . "\n"; - } - $body .= "\n" . RAPPEL . " : \n"; - $body .= ' - Adresse : https://' . $_SERVER['HTTP_HOST'] . '/' . "\n"; - $body .= ' - Login : ' . $client->email . "\n"; - $body .= ' - Mot de passe : ' . $client->password . "\n"; - } - $mail->body = $body; - $ok = $mail->send(); - } - - - ob_clean(); - exit; - } - - public static function adresse($utilisateur_id = null, $projet_id = null, $display = 'devis', $adresse = '') { - global $core; - $dao = new commonDAOClient($core->con); - if (!is_null($utilisateur_id)) { - $client = $dao->selectById($utilisateur_id); - } - if (!is_null($projet_id)) { - $client = $dao->selectByProjet($projet_id); - } - if (is_null($client)) { - return false; - } - - if ($adresse == '') { - $adresse = array(); - if ($client->adresse_facturation != '') { - $adresse[] = $client->adresse_facturation; - } else { - $adresse[] = $client->rs; - $adresse[] = trim($client->adresse); - $adresse[] = $client->code_postal . ' ' . $client->ville; - $adresse[] = cubeCountry::getCountry($client->pays); - } - } else { - $adresse = explode("\n", trim($adresse)); - } - if ($display == 'facture' && $client->tva_intra != '' && cubeCountry::inUE($client->pays)) { - $tva = '
' . __('N° de TVA Intracommunautaire') . ' : ' . $client->tva_intra . ''; - } else { - $tva = ''; - } - $a = form::textarea('adresse', 40, 6, implode("\n", $adresse)); - $a .= $tva; - $a .= '' . cubeMedia::image(IMG . '/edit.png') . ''; - return $a; - } + file_put_contents($file, $xml); + unlink($tmp); + } + return str_replace('http://', 'https://', $res); + } + + public static function hashFile($path) + { + $path = trim($path, '/'); + return sha1('!!//' . $path . '||--'); + } + + public static function telechargerr($args) + { + return self::telecharger($args, true); + } + + public static function telecharger($args, $relay = false) + { + array_shift($args); + $hash = array_shift($args); + $path = implode('/', $args); + $utilisateur_id = array_shift($args); + $nom = array_pop($args); + + $verihash = self::hashFile($path); + if ($hash != $verihash) { + return; + } + + cubeHTTP::xsendFile(FTPROOT . $path, false, true); + } + + public static function upload($args) + { + global $core; + + commonDroits::min(array('extranet' => 0, 'ws' => 1)); + + if (isset($args[1]) && $args[1] != '') { + $for = $args[1]; + } else { + $for = false; + } + + if (!$for) { + $destrel = $core->user->utilisateur_id; + } else { + $destrel = $for . '/.in/' . $core->user->utilisateur_id; + } + $dest = FTPROOT . $destrel; + if (!file_exists($dest)) { + mkdir($dest, 0755, true); + } + + $files_uploaded = array(); + + print_r($_FILES); + + + foreach ($_FILES['files']['name'] as $k => $ffname) { + if ($_FILES['files']['error'][$k]) { + continue; + } + $fname = cubeFiles::tidyName($ffname); + while (file_exists($dest . '/' . $fname)) { + $name = cubeFiles::getName($fname); + $ext = files::getExtension($fname); + + $name .= '.' . rand(1, 9); + $fname = $name . '.' . $ext; + } + + move_uploaded_file($_FILES['files']['tmp_name'][$k], $dest . '/' . $fname); + $files_uploaded[] = $destrel . '/' . $fname; + } + + if (count($files_uploaded) > 0) { + $mail = new cubeMail(); + $mail->charset = 'UTF-8'; + $mail->from = FROM_NAME . '<' . FROM_EMAIL . '>'; + if (!$for) { + $mail->to = TEAM_EMAIL; + $mail->subject = '[' . EMAIL_SUBJECT . '] Nouveaux fichiers uploadés par ' . $core->user->prenom . ' ' . $core->user->nom; + $body = 'Tous les fichiers de ' . $core->user->prenom . ' ' . $core->user->nom . ' : https://' . $_SERVER['HTTP_HOST'] . '/fichiers/' . $core->user->utilisateur_id . "\n\n"; + $body .= 'Fichiers chargés : ' . "\n"; + foreach ($files_uploaded as $f) { + $body .= ' - https://' . $_SERVER['HTTP_HOST'] . '/telecharger/' . $f . "\n"; + } + } else { + $dao = new commonDAOClient($core->con); + $client = $dao->selectById($for); + + $mail->to = $core->user->email; + $mail->subject = '[' . EMAIL_SUBJECT . '] Nouveaux fichiers uploadés pour ' . $client->prenom . ' ' . $client->nom; + + $body = 'Tous les fichiers de ' . $client->prenom . ' ' . $client->nom . ' : https://' . $_SERVER['HTTP_HOST'] . '/fichiers/' . $client->utilisateur_id . "\n\n"; + $body .= 'Fichiers chargés : ' . "\n"; + foreach ($files_uploaded as $f) { + $body .= ' - https://' . $_SERVER['HTTP_HOST'] . '/telecharger/' . commonUrl::hashFile($f) . '/' . $f . "\n"; + } + $body .= "\n" . RAPPEL . " : \n"; + $body .= ' - Adresse : https://' . $_SERVER['HTTP_HOST'] . '/' . "\n"; + $body .= ' - Login : ' . $client->email . "\n"; + $body .= ' - Mot de passe : ' . $client->password . "\n"; + } + $mail->body = $body; + $ok = $mail->send(); + } + + + ob_clean(); + exit; + } + + public static function adresse($utilisateur_id = null, $projet_id = null, $display = 'devis', $adresse = '') + { + global $core; + $dao = new commonDAOClient($core->con); + if (!is_null($utilisateur_id)) { + $client = $dao->selectById($utilisateur_id); + } + if (!is_null($projet_id)) { + $client = $dao->selectByProjet($projet_id); + } + if (is_null($client)) { + return false; + } + + if ($adresse == '') { + $adresse = array(); + if ($client->adresse_facturation != '') { + $adresse[] = $client->adresse_facturation; + } else { + $adresse[] = $client->rs; + $adresse[] = trim($client->adresse); + $adresse[] = $client->code_postal . ' ' . $client->ville; + $adresse[] = cubeCountry::getCountry($client->pays); + } + } else { + $adresse = explode("\n", trim($adresse)); + } + if ($display == 'facture' && $client->tva_intra != '' && cubeCountry::inUE($client->pays)) { + $tva = '
' . __('N° de TVA Intracommunautaire') . ' : ' . $client->tva_intra . ''; + } else { + $tva = ''; + } + $a = form::textarea('adresse', 40, 6, implode("\n", $adresse)); + $a .= $tva; + $a .= '' . cubeMedia::image(IMG . '/edit.png') . ''; + return $a; + } } \ No newline at end of file