<?php\r
\r
-class commonUrl {\r
-\r
- public static function hub($args) {\r
- global $core;\r
- $args = cubePage::getArgs($args);\r
- // Si l'utilisateur n'est pas connecté, on affiche le formulaire\r
- // de login\r
-\r
- $bypass = array('stats', 'telecharger', 'telechargerr', 'orpiref');\r
-\r
- if ((!isset($args[0]) || !in_array($args[0], $bypass)) && (is_null($core->user) || !$core->user)) {\r
- $args = array('login');\r
- } else {\r
- if (isset($args[0]) && $args[0] == 'login') {\r
- http::redirect('/');\r
- }\r
- if (!count($args)) {\r
- // Page par défaut (premier onglet)\r
- if (MODE == 'extranet') {\r
- $nav = extranetDroits::navigation();\r
- } elseif (MODE == 'ws') {\r
- $nav = wsDroits::navigation();\r
- }\r
- foreach ($nav as $titre => $url) {\r
- $args = array($url);\r
- break;\r
- }\r
- }\r
- }\r
-\r
- $f = $args[0];\r
-\r
- $classes = array(MODE . 'Url', 'commonUrl');\r
-\r
- if (!isset($_GET['light'])) {\r
- echo commonPage::header($args);\r
- }\r
-\r
- foreach ($classes as $class) {\r
- $cb = array($class, $f);\r
- if (is_callable($cb)) {\r
- echo call_user_func($cb, $args);\r
- break;\r
- }\r
- }\r
- if (!isset($_GET['light'])) {\r
- echo commonPage::footer();\r
- }\r
- }\r
-\r
- public static function login($args) {\r
- global $core;\r
- $core->con->select('SELECT 2');\r
-\r
- $tentative = isset($_SESSION['errorLogin']) && $_SESSION['errorLogin'];\r
- if ($tentative) {\r
- $_SESSION['errorLogin'] = false;\r
- }\r
-\r
- $message = $tentative ? '<p class="message"><br />' . __('Identifiants incorrects') . '</p>' : '';\r
-\r
- $res = commonPage::barre();\r
- $res .= commonPage::tMain();\r
- $res .= commonPage::bh('login');\r
- $res .= '<div class="form">';\r
- $res .= '<form action="' . $_SERVER['REQUEST_URI'] . '" method="post" class="notajax">';\r
- $res .= '<h1>' . __('Veuillez vous identifier') . '</h1>';\r
- $res .= $message;\r
- $res .= '<table>';\r
- $res .= '<tr><td>' . __('Votre e-mail ou login') . ' : </td><td>' . cubeForm::email('user_email', 20, 64, '') . '</td></tr>';\r
- $res .= '<tr><td>' . __('Votre mot de passe') . ' : </td><td>' . form::password('user_password', 20, 64, '') . '</td></tr>';\r
- $res .= '<tr><td colspan="2"><a href="#" class="popup" rel="motdepasseOublie">' . __('Mot de passe oublié ? Cliquez ici') . '</a></td></tr>';\r
- $res .= '<tr><td colspan="2" class="right"><a href="#" class="submit">' . $core->typo->BoutonOK('Cliquez-ici pour vous identifier') . '</a></td></tr>';\r
- $res .= '</table>';\r
- $res .= '</form>';\r
- $res .= '</div>';\r
- $res .= commonPage::bf();\r
- $res .= commonPage::bMain();\r
- return $res;\r
- }\r
-\r
- public static function logout($args) {\r
- if (isset($_SESSION['user_email'])) {\r
- unset($_SESSION['user_email']);\r
- }\r
- if (isset($_SESSION['password_email'])) {\r
- unset($_SESSION['password_email']);\r
- }\r
- http::redirect(SITE_PATH);\r
- }\r
-\r
- public static function motdepasseOublie($args) {\r
- return '<tr><td>' . __('Entrez votre e-mail') . ' : </td><td>' . cubeForm::email('email', 30, 128) . '</td></tr>';\r
- }\r
-\r
- public static function mesParametres($args) {\r
- global $core;\r
- $utilisateur = $core->user;\r
-\r
- $res = '<tr><td>Mot de passe :</td><td><a href="#" class="popup" rel="changeMotdepasse">Changer mon mot de passe</a></td></tr>';\r
- $res .= '<tr><td>Login :</td><td>' . form::field('login', 20, 64, $utilisateur->login) . '</td></tr>';\r
- $res .= '<tr><td>Langue de l\'interface :</td><td>' . form::combo('lang', cubeLang::getAvailableLangs(true), $utilisateur->lang) . '</td></tr>';\r
- $res .= '<tr><td colspan="2" class="right"><a href="#" class="submit">' . $core->typo->BoutonOK(__('Enregister')) . '</a></td></tr>';\r
- if ($utilisateur instanceof commonClient) {\r
- $res .= '<tr><td colspan="2"></td></tr>';\r
- $res .= '<tr><th colspan="2">' . __('Mes informations') . '</th></tr>';\r
- $res .= '<tr><td>' . __('Numéro de client') . ' : </td><td>' . $utilisateur->utilisateur_id . '</td></tr>';\r
- $res .= '<tr><td>' . __('Prénom') . ' : </td><td>' . $utilisateur->prenom . '</td></tr>';\r
- $res .= '<tr><td>' . __('Nom') . ' : </td><td>' . $utilisateur->nom . '</td></tr>';\r
- $res .= '<tr><td>' . __('Adresse e-mail') . ' : </td><td>' . $utilisateur->email . '</td></tr>';\r
- $res .= '<tr><td>' . __('Raison sociale') . ' : </td><td>' . $utilisateur->rs . '</td></tr>';\r
- $res .= '<tr><td>' . __('Adresse') . ' : </td><td>' . nl2br($utilisateur->adresse) . '<br />' . $utilisateur->code_postal . ' ' . $utilisateur->ville . '<br />' . cubeCountry::getCountry($utilisateur->pays) . '</td></tr>';\r
- $res .= '<tr><td>' . __('Numéro de téléphone') . ' : </td><td>' . $utilisateur->telephone . '</td></tr>';\r
- $res .= '<tr><td>' . __('Numéro de mobile') . ' : </td><td>' . $utilisateur->mobile . '</td></tr>';\r
- $res .= '<tr><td>' . __('Numéro de fax') . ' : </td><td>' . $utilisateur->fax . '</td></tr>';\r
- $res .= '<tr><td>' . __('Numéro de TVA intracommunautaire') . ' : </td><td>' . $utilisateur->tva_intra . '</td></tr>';\r
- $res .= '<tr><td colspan="2"><em>' . __('Si les informations ci-dessus sont incomplètes ou erronées, veuillez nous<br />en informer en nous écrivant à ') . '<a href="mailto:' . FROM_EMAIL . '">' . FROM_EMAIL . '</a></em></td></tr>';\r
- }\r
-\r
- return $res;\r
- }\r
-\r
- public static function changeMotdepasse() {\r
- $res = '<tr><td colspan="2"><em>' . __('Votre mot de passe doit comprendre en 6 et 10 caractères') . '</em></td></tr>';\r
- $res .= '<tr><td>' . __('Tapez votre mot de passe actuel') . ' : </td><td>' . form::password('actuel', 20, 10) . '</td></tr>';\r
- $res .= '<tr><td>' . __('Tapez votre nouveau mot de passe') . ' : </td><td>' . form::password('nouveau', 20, 10) . '</td></tr>';\r
- $res .= '<tr><td>' . __('Confirmez votre nouveau mot de passe') . ' : </td><td>' . form::password('confirmation', 20, 10) . '</td></tr>';\r
- return $res;\r
- }\r
-\r
- public static function orderby($label, $field, $settings, $function, $title = '') {\r
- $res = '<a href="#" class="nowrap ajax" title="' . $title . '" rel="' . $function . '/' . $field . '">';\r
- $res .= $label;\r
- if ($settings['orderby'] == $field) {\r
- $puce = ($settings['sens'] == 'DESC') ? 'down' : 'up';\r
- $res .= ' ' . cubeMedia::image(IMG . '/' . $puce . '.png');\r
- }\r
- $res .= '</a>';\r
- return $res;\r
- }\r
-\r
- public static function formParPage($action, $value, $nom = 'éléments', $all = true) {\r
- $values = array(2, 5, 10, 15, 25, 50, 100);\r
- if ($all) {\r
- $datas = array(__('Tous les ') . $nom => 0);\r
- } else {\r
- $datas = array();\r
- }\r
- foreach ($values as $v) {\r
- $datas[$v . ' ' . $nom] = $v;\r
- }\r
-\r
- $res = '<form action="' . $action . '" method="post" class="submitonchange">';\r
- $res .= '<div class="formParPage">' . __('Afficher') . ' : ' . form::combo(array('par_page'), $datas, $value) . ' ' . __('par page') . '</div>';\r
- $res .= '<div>' . cubeMedia::spacer(950, 1) . '</div>';\r
- $res .= '</form>';\r
- return $res;\r
- }\r
-\r
- public static function autocomplete($args) {\r
- global $core;\r
-\r
- fb('!!!!');\r
-\r
- if (isset($_GET['q'])) {\r
- $args[2] = $_GET['q'];\r
- }\r
- $q = mb_strtolower(cubeText::removeAccents($args[2]));\r
- $suggestions = array();\r
- if ($args[1] == 'client') {\r
- $dao = new commonDAOClient($core->con);\r
- $dao->setSearch($q, true);\r
- $clients = $dao->getListe();\r
- foreach ($clients as $client) {\r
- $suggestions[] = $client->utilisateur_id . ' - ' . $client->rs . ' (' . $client->prenom . ' ' . $client->nom . ')';\r
- }\r
- } elseif ($args[1] == 'projet') {\r
- $dao = new extranetDAOProjet($core->con);\r
- $dao->setSearch($q, true);\r
- $projets = $dao->getListe();\r
- foreach ($projets as $projet) {\r
- $suggestions[] = $projet->projet_id . ' - ' . $projet->nom . ' (' . $projet->client . ')';\r
- }\r
- } elseif ($args[1] == 'book') {\r
- $dao = new wsDAOBook($core->con);\r
- $dao->setSearch($q, true);\r
- $books = $dao->getListe('date', 'DESC', 15, $core->user);\r
- foreach ($books as $book) {\r
- $suggestions[] = $book->book_id . ' - ' . $book->nom;\r
- }\r
- } elseif ($args[1] == 'wsuser') {\r
- $dao = new commonDAOUtilisateur($core->con);\r
- $dao->setSearch($q, true);\r
- $clients = $dao->getListe('utilisateur_id', 'ASC', null, ' AND ws_grade>0', $core->user);\r
- foreach ($clients as $client) {\r
- $suggestions[] = $client->utilisateur_id . ' - ' . $client->rs . ' (' . $client->prenom . ' ' . $client->nom . ')';\r
- }\r
- } elseif ($args[1] == 'wsadmin') {\r
- $dao = new commonDAOUtilisateur($core->con);\r
- $dao->setSearch($q, true);\r
- $clients = $dao->getListe('utilisateur_id', 'ASC', null, 'AND ws_grade>2', $core->user);\r
- foreach ($clients as $client) {\r
- $suggestions[] = $client->utilisateur_id . ' - ' . $client->rs . ' (' . $client->prenom . ' ' . $client->nom . ')';\r
- }\r
- }\r
- cubeSearch::searchSuggestion($args[2], $suggestions);\r
- exit;\r
- }\r
-\r
- public static function dashboard($args) {\r
- commonDroits::dashboard();\r
-\r
- cubePage::ui('Sortable');\r
- $res = commonPage::barre();\r
- $res .= commonPage::tMain('dash');\r
- $res .= commonUrl::listeDashboard($args);\r
- $res .= commonPage::bMain();\r
- return $res;\r
- }\r
-\r
- public static function listeDashboard($args) {\r
- commonDroits::dashboard();\r
- global $core;\r
- $r = $core->con->select('SELECT * FROM dashboard WHERE equipier=\'' . $core->user->utilisateur_id . '\' AND site=\'' . MODE . '\' ORDER BY sort');\r
- $res = '';\r
- while ($r->fetch()) {\r
- $res .= '<div class="dashboard" id="dashboard_' . $r->dashboard_id . '">';\r
- $res .= commonUrl::displayDashboard($r);\r
- $res .= '</div>';\r
- }\r
- return $res;\r
- }\r
-\r
- public static function displayDashboard($r) {\r
- commonDroits::dashboard();\r
- global $core;\r
- $res = '<div class="caption">' . $core->typo->OngletBlanc($r->nom);\r
-\r
- $close = ($r->state == '0') ? ' close' : '';\r
- $hide = ($r->state == '0') ? ' class="close"' : '';\r
-\r
- $res .= '<a href="#" rel="' . $r->dashboard_id . '" class="toggle' . $close . '">' . cubeMedia::spacer(18, 10) . '</a>';\r
- $res .= '<a href="#" rel="formDashboard/d/' . $r->dashboard_id . '" class="edit popup">' . cubeMedia::image(IMG . '/edit.png') . '</a>';\r
- $res .= '<a href="#" rel="delDashboard/' . $r->dashboard_id . '" class="ajax delete" title="' . __('Êtes vous certain de vouloir supprimer cette liste de votre dashboard ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a>';\r
- $res .= '</div>';\r
- $res .= commonPage::bh();\r
- $res .= '<div' . $hide . '>';\r
-\r
- if ($r->rubrique == 'projets') {\r
- $res .= extranetUrl::listeProjets($r->dashboard_id, self::getDashboardSettings($r->settings));\r
- } elseif ($r->rubrique == 'factures') {\r
- $res .= extranetUrl::listeFactures($r->dashboard_id, self::getDashboardSettings($r->settings));\r
- } elseif ($r->rubrique == 'devis') {\r
- $res .= extranetUrl::listeDevis($r->dashboard_id, self::getDashboardSettings($r->settings));\r
- } elseif ($r->rubrique == 'clients' && MODE == 'extranet') {\r
- $res .= extranetUrl::listeClients($r->dashboard_id, self::getDashboardSettings($r->settings));\r
- } elseif ($r->rubrique == 'timereport') {\r
- $res .= extranetUrl::listeTimereport($r->dashboard_id, self::getDashboardSettings($r->settings));\r
- } elseif ($r->rubrique == 'demandes') {\r
- $res .= wsUrl::listeDemandes($r->dashboard_id, self::getDashboardSettings($r->settings));\r
- } elseif ($r->rubrique == 'books') {\r
- $res .= wsUrl::listeBooks($r->dashboard_id, self::getDashboardSettings($r->settings));\r
- }\r
- $res .= '</div>';\r
- $res .= commonPage::bf();\r
-\r
- return $res;\r
- }\r
-\r
- public static function getDashboardSettings($s) {\r
- commonDroits::dashboard();\r
- $s = unserialize($s);\r
- if (isset($s['filtres']['annee'])) {\r
- $s['filtres']['annee'] = range(2006, date('Y'), 1);\r
- }\r
- return $s;\r
- }\r
-\r
- public static function formDashboard($args) {\r
- commonDroits::dashboard();\r
- global $core;\r
- $rub = $args[1];\r
- $dashboard_id = isset($args[2]) ? $args[2] : 'new';\r
-\r
- if ($dashboard_id == 'new') {\r
- $res = '<tr><td class="right">Titre de la liste</td><td>' . form::field('nom', 20, 128, false) . form::hidden('rubrique', $rub) . form::hidden('dashboard_id', $dashboard_id) . '</td></tr>';\r
- } else {\r
- $r = $core->con->select('SELECT * FROM dashboard WHERE dashboard_id=\'' . $core->con->escape($dashboard_id) . '\'');\r
- $res = '<tr><td class="right">Titre de la liste</td><td>' . form::field('nom', 20, 128, $r->nom) . form::hidden('dashboard_id', $dashboard_id) . '</td></tr>';\r
- }\r
-\r
- return $res;\r
- }\r
-\r
- public static function fichiers($args) {\r
- global $core;\r
-\r
- commonDroits::min(array('extranet' => 0, 'ws' => 1));\r
-\r
- $settings = $core->user->getSettings('fichiers');\r
- if ($core->user->ws_grade > 0 && isset($args[1])) {\r
- $dao = new commonDAOClient($core->con);\r
- $client = $dao->selectById($args[1]);\r
- fb($client);\r
- $_SESSION['entreprise_fichiers'] = $client->entreprise;\r
- } else {\r
- unset($_SESSION['entreprise_fichiers']);\r
- }\r
-\r
- $shortcuts = array();\r
- // $shortcuts[] = '<a href="#" class="popup" rel="formProjet/new">' . $core->typo->Ajouter('Créer un projet') . '</a>';\r
- $filtres = array();\r
- $res = '';\r
-\r
- $res .= commonPage::barre();\r
-\r
- $res .= commonPage::tMain();\r
- if ($core->user->grade == 0) {\r
- $res .= self::formFichier();\r
- } else {\r
- $res .= self::formFichier($args[1]);\r
- }\r
- $res .= commonPage::bh();\r
- $res .= '<div id="listeFichiers">';\r
- $res .= self::listeFichiers($settings);\r
- $res .= '</div>';\r
- $res .= commonPage::bf();\r
- $res .= commonPage::bMain();\r
- return $res;\r
- }\r
-\r
- public static function formFichier($for = 'client') {\r
- global $core;\r
-\r
- if ($for == 'client') {\r
- $titre = __('Envoyez-nous un fichier');\r
- $texte = __('Cliquez sur le bouton Parcourir, et sélectionnez le ou les fichiers que vous souhaitez nous faire parvenir');\r
- } else {\r
- $dao = new commonDAOClient($core->con);\r
- $client = $dao->selectById($for);\r
- $titre = __('Envoyer un fichier à') . ' ' . $client->prenom . ' ' . $client->nom;\r
- $texte = '';\r
- }\r
-\r
- $res = '<div class="dashboard">';\r
- $res .= '<div class="caption">' . $core->typo->OngletBlancNoDash($titre) . '</div>';\r
- $res .= commonPage::bh();\r
- $res .= '<div class="gris form">';\r
- $res .= '<h1>' . $texte . '</h1>';\r
-\r
-\r
- if ($for == 'client') {\r
- $action = SITE_PATH . 'upload';\r
- } else {\r
-\r
- $action = SITE_PATH . 'upload/' . $for;\r
- }\r
- $res .= '<form id="upload" action="' . $action . '" method="post" enctype="multipart/form-data" class="notajax">';\r
- $res .= '<input type="file" name="files[]" multiple="multiple" />';\r
- $res .= '<div class="progress"><div class="back"></div><div class="bar"></div><div class="status">Veuillez sélectionner un ou plusieurs fichier</div> </div><a href="#" class="button">' . __('Parcourir') . '...</a>';\r
- $res .= '</form>';\r
- $res .= '</div>';\r
- $res .= commonPage::bf();\r
- $res .= '</div>';\r
- return $res;\r
- }\r
-\r
- public static function listeFichiers($settings = null) {\r
- commonDroits::min(array('extranet' => 0, 'ws' => 1));\r
-\r
- global $core;\r
- if ($core->user->ws_grade <= 0 && isset($_SESSION['entreprise_fichiers'])) {\r
- $entreprise = $core->user->entreprise;\r
- } else {\r
- $entreprise = $_SESSION['entreprise_fichiers'];\r
- }\r
-\r
- $settings = is_null($settings) ? $core->user->getSettings('fichiers') : $settings;\r
- $dao = new commonDAOFichier($core->con);\r
- $change = 'Fichiers';\r
- $dao->entreprise_id = $entreprise;\r
- if (isset($settings['search']) && !is_null($settings['search'])) {\r
- $dao->setSearch($settings['search']);\r
- }\r
- $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']);\r
-\r
- $res = '<table class="liste">';\r
- $res .= '<tr><th>' . commonUrl::orderby(__('Nom de fichier'), 'nom', $settings, 'sort' . $change) . '</th>';\r
- $res .= '<th>' . commonUrl::orderby(__('Type'), 'type', $settings, 'sort' . $change) . '</th>';\r
- $res .= '<th>' . commonUrl::orderby(__('Taille'), 'taille', $settings, 'sort' . $change) . '</th>';\r
- $res .= '<th>' . commonUrl::orderby(__('Date'), 'date', $settings, 'sort' . $change) . '</th>';\r
- $res .= '<th>' . commonUrl::orderby(__('Envoyé par'), 'contact', $settings, 'sort' . $change) . '</th>';\r
- $res .= '<th>' . commonUrl::orderby(__('Destiné à'), 'destinataire', $settings, 'sort' . $change) . '</th>';\r
- $res .= '<th class="min"></th><th class="min"></th></tr>';\r
- $i = 0;\r
- foreach ($liste as $fichier) {\r
- $odd = cubeMath::isOdd($i) ? ' class="odd"' : '';\r
- $res .= '<tr' . $odd . '>';\r
- $res .= '<td>' . $fichier->nom . '</td>';\r
- $res .= '<td>' . $fichier->type . '</td>';\r
- $res .= '<td>' . files::size($fichier->taille) . '</td>';\r
- $res .= '<td>' . date(__('d/m/Y'), $fichier->date) . '</td>';\r
- $res .= '<td>' . $fichier->contact->prenom . ' ' . $fichier->contact->nom . '</td>';\r
- if ($fichier->destinataire) {\r
- $res .= '<td>' . $fichier->destinataire->prenom . ' ' . $fichier->destinataire->nom . '</td>';\r
- } else {\r
- $res .= '<td></td>';\r
- }\r
- $res .= '<td>' . self::telechargerLink($fichier) . '</td>';\r
- $res .= '<td><a href="#" class="ajax" rel="supprimeFichier/' . $fichier->relPath . '" title="' . __('Êtes-vous certain de vouloir supprimer ce fichier ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a></td>';\r
- $res .= '</tr>';\r
- $i++;\r
- }\r
- if (!isset($settings['search']) || is_null($settings['search'])) {\r
- $odd = cubeMath::isOdd($i) ? ' class="odd"' : '';\r
- $res .= '<tr' . $odd . '><td colspan="12">';\r
- $res .= commonPage::pager($settings['page'], $dao->count(), $settings['par_page'], 'page' . $change . '/%d');\r
- $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('fichiers'));\r
- $res .= '</td></tr>';\r
- }\r
- $res .= '</table>';\r
- return $res;\r
- }\r
-\r
- public static function telechargerLink($fichier) {\r
- global $core;\r
- $ext = files::getExtension($fichier->relPath);\r
-\r
- $res = '';\r
- if ($ext == 'ipa') {\r
- $res .= '<a href="itms-services://?action=download-manifest&url=' . self::manifestFromIpa($fichier) . '">' . $core->typo->Telecharger('Installer') . '</a> ';\r
- }\r
- $res .= '<a href="' . SITE_PATH . 'telecharger/' . self::hashFile($fichier->relPath) . '/' . $fichier->relPath . '">' . $core->typo->Telecharger('Télécharger') . '</a>';\r
- return $res;\r
- }\r
-\r
- public static function manifestFromIpa($fichier) {\r
- $path = '/cache/iosotamanifest/' . sha1($fichier->relPath) . '/';\r
- $webpath = SCHEME . '://' . $_SERVER['HTTP_HOST'] . $path;\r
- $filepath = ROOT . $path;\r
-\r
- if (!file_exists($filepath)) {\r
- mkdir($filepath, 0777, true);\r
- }\r
-\r
- $res = $webpath . 'manifest.plist';\r
- $file = $filepath . 'manifest.plist';\r
- $tmp = $file . '.info';\r
- $ipa = $fichier->chemin;\r
-\r
- if (true || !file_exists($file) || filemtime($ipa) > filemtime($file)) {\r
- $zip = new ZipArchive();\r
- $zip->open($fichier->chemin);\r
- for ($i = 0; $i < $zip->numFiles; $i++) {\r
- $filename = $zip->getNameIndex($i);\r
- if (preg_match('|Payload/\S+.app/Info.plist|', $filename, $matches)) {\r
- $idx = $i;\r
- break;\r
- }\r
- }\r
- $info = $zip->getFromIndex($idx);\r
-\r
- file_put_contents($tmp, $info);\r
-\r
-\r
- require_once(ROOT . '/inc/cube/externals/CFPropertyList/CFPropertyList.php');\r
- $plist = new CFPropertyList\CFPropertyList($tmp);\r
-\r
- $infos = $plist->toArray();\r
-\r
- $protocol = 'https';\r
-\r
- $bundle = $infos['CFBundleIdentifier'];\r
- $appName = $infos['CFBundleDisplayName'];\r
- $version = $infos['CFBundleVersion'];\r
- $ipaURL = $protocol . '://' . $_SERVER['HTTP_HOST'] . '/telechargerr/' . self::hashFile($fichier->relPath . '//') . '/' . $fichier->relPath;\r
-\r
- $xml = '<?xml version="1.0" encoding="UTF-8"?>\r
+class commonUrl\r
+{\r
+\r
+ public static function hub($args)\r
+ {\r
+ global $core;\r
+ $args = cubePage::getArgs($args);\r
+ // Si l'utilisateur n'est pas connecté, on affiche le formulaire\r
+ // de login\r
+\r
+ $bypass = array('stats', 'telecharger', 'telechargerr', 'orpiref');\r
+\r
+ if ((!isset($args[0]) || !in_array($args[0], $bypass)) && (is_null($core->user) || !$core->user)) {\r
+ $args = array('login');\r
+ } else {\r
+ if (isset($args[0]) && $args[0] == 'login') {\r
+ http::redirect('/');\r
+ }\r
+ if (!count($args)) {\r
+ // Page par défaut (premier onglet)\r
+ if (MODE == 'extranet') {\r
+ $nav = extranetDroits::navigation();\r
+ } elseif (MODE == 'ws') {\r
+ $nav = wsDroits::navigation();\r
+ }\r
+ foreach ($nav as $titre => $url) {\r
+ $args = array($url);\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ $f = $args[0];\r
+\r
+ $classes = array(MODE . 'Url', 'commonUrl');\r
+\r
+ if (!isset($_GET['light'])) {\r
+ echo commonPage::header($args);\r
+ }\r
+\r
+ foreach ($classes as $class) {\r
+ $cb = array($class, $f);\r
+ if (is_callable($cb)) {\r
+ echo call_user_func($cb, $args);\r
+ break;\r
+ }\r
+ }\r
+ if (!isset($_GET['light'])) {\r
+ echo commonPage::footer();\r
+ }\r
+ }\r
+\r
+ public static function login($args)\r
+ {\r
+ global $core;\r
+ $core->con->select('SELECT 2');\r
+\r
+ $tentative = isset($_SESSION['errorLogin']) && $_SESSION['errorLogin'];\r
+ if ($tentative) {\r
+ $_SESSION['errorLogin'] = false;\r
+ }\r
+\r
+ $message = $tentative ? '<p class="message"><br />' . __('Identifiants incorrects') . '</p>' : '';\r
+\r
+ $res = commonPage::barre();\r
+ $res .= commonPage::tMain();\r
+ $res .= commonPage::bh('login');\r
+ $res .= '<div class="form">';\r
+ $res .= '<form action="' . $_SERVER['REQUEST_URI'] . '" method="post" class="notajax">';\r
+ $res .= '<h1>' . __('Veuillez vous identifier') . '</h1>';\r
+ $res .= $message;\r
+ $res .= '<table>';\r
+ $res .= '<tr><td>' . __('Votre e-mail ou login') . ' : </td><td>' . cubeForm::email('user_email', 20, 64, '') . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Votre mot de passe') . ' : </td><td>' . form::password('user_password', 20, 64, '') . '</td></tr>';\r
+ $res .= '<tr><td colspan="2"><a href="#" class="popup" rel="motdepasseOublie">' . __('Mot de passe oublié ? Cliquez ici') . '</a></td></tr>';\r
+ $res .= '<tr><td colspan="2" class="right"><a href="#" class="submit">' . $core->typo->BoutonOK('Cliquez-ici pour vous identifier') . '</a></td></tr>';\r
+ $res .= '</table>';\r
+ $res .= '</form>';\r
+ $res .= '</div>';\r
+ $res .= commonPage::bf();\r
+ $res .= commonPage::bMain();\r
+ return $res;\r
+ }\r
+\r
+ public static function logout($args)\r
+ {\r
+ if (isset($_SESSION['user_email'])) {\r
+ unset($_SESSION['user_email']);\r
+ }\r
+ if (isset($_SESSION['password_email'])) {\r
+ unset($_SESSION['password_email']);\r
+ }\r
+ http::redirect(SITE_PATH);\r
+ }\r
+\r
+ public static function motdepasseOublie($args)\r
+ {\r
+ return '<tr><td>' . __('Entrez votre e-mail') . ' : </td><td>' . cubeForm::email('email', 30, 128) . '</td></tr>';\r
+ }\r
+\r
+ public static function mesParametres($args)\r
+ {\r
+ global $core;\r
+ $utilisateur = $core->user;\r
+\r
+ $res = '<tr><td>Mot de passe :</td><td><a href="#" class="popup" rel="changeMotdepasse">Changer mon mot de passe</a></td></tr>';\r
+ $res .= '<tr><td>Login :</td><td>' . form::field('login', 20, 64, $utilisateur->login) . '</td></tr>';\r
+ $res .= '<tr><td>Langue de l\'interface :</td><td>' . form::combo('lang', cubeLang::getAvailableLangs(true), $utilisateur->lang) . '</td></tr>';\r
+ $res .= '<tr><td colspan="2" class="right"><a href="#" class="submit">' . $core->typo->BoutonOK(__('Enregister')) . '</a></td></tr>';\r
+ if ($utilisateur instanceof commonClient) {\r
+ $res .= '<tr><td colspan="2"></td></tr>';\r
+ $res .= '<tr><th colspan="2">' . __('Mes informations') . '</th></tr>';\r
+ $res .= '<tr><td>' . __('Numéro de client') . ' : </td><td>' . $utilisateur->utilisateur_id . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Prénom') . ' : </td><td>' . $utilisateur->prenom . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Nom') . ' : </td><td>' . $utilisateur->nom . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Adresse e-mail') . ' : </td><td>' . $utilisateur->email . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Raison sociale') . ' : </td><td>' . $utilisateur->rs . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Adresse') . ' : </td><td>' . nl2br($utilisateur->adresse) . '<br />' . $utilisateur->code_postal . ' ' . $utilisateur->ville . '<br />' . cubeCountry::getCountry($utilisateur->pays) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Numéro de téléphone') . ' : </td><td>' . $utilisateur->telephone . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Numéro de mobile') . ' : </td><td>' . $utilisateur->mobile . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Numéro de fax') . ' : </td><td>' . $utilisateur->fax . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Numéro de TVA intracommunautaire') . ' : </td><td>' . $utilisateur->tva_intra . '</td></tr>';\r
+ $res .= '<tr><td colspan="2"><em>' . __('Si les informations ci-dessus sont incomplètes ou erronées, veuillez nous<br />en informer en nous écrivant à ') . '<a href="mailto:' . FROM_EMAIL . '">' . FROM_EMAIL . '</a></em></td></tr>';\r
+ }\r
+\r
+ return $res;\r
+ }\r
+\r
+ public static function changeMotdepasse()\r
+ {\r
+ $res = '<tr><td colspan="2"><em>' . __('Votre mot de passe doit comprendre en 6 et 10 caractères') . '</em></td></tr>';\r
+ $res .= '<tr><td>' . __('Tapez votre mot de passe actuel') . ' : </td><td>' . form::password('actuel', 20, 10) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Tapez votre nouveau mot de passe') . ' : </td><td>' . form::password('nouveau', 20, 10) . '</td></tr>';\r
+ $res .= '<tr><td>' . __('Confirmez votre nouveau mot de passe') . ' : </td><td>' . form::password('confirmation', 20, 10) . '</td></tr>';\r
+ return $res;\r
+ }\r
+\r
+ public static function orderby($label, $field, $settings, $function, $title = '')\r
+ {\r
+ $res = '<a href="#" class="nowrap ajax" title="' . $title . '" rel="' . $function . '/' . $field . '">';\r
+ $res .= $label;\r
+ if ($settings['orderby'] == $field) {\r
+ $puce = ($settings['sens'] == 'DESC') ? 'down' : 'up';\r
+ $res .= ' ' . cubeMedia::image(IMG . '/' . $puce . '.png');\r
+ }\r
+ $res .= '</a>';\r
+ return $res;\r
+ }\r
+\r
+ public static function formParPage($action, $value, $nom = 'éléments', $all = true)\r
+ {\r
+ $values = array(2, 5, 10, 15, 25, 50, 100);\r
+ if ($all) {\r
+ $datas = array(__('Tous les ') . $nom => 0);\r
+ } else {\r
+ $datas = array();\r
+ }\r
+ foreach ($values as $v) {\r
+ $datas[$v . ' ' . $nom] = $v;\r
+ }\r
+\r
+ $res = '<form action="' . $action . '" method="post" class="submitonchange">';\r
+ $res .= '<div class="formParPage">' . __('Afficher') . ' : ' . form::combo(array('par_page'), $datas, $value) . ' ' . __('par page') . '</div>';\r
+ $res .= '<div>' . cubeMedia::spacer(950, 1) . '</div>';\r
+ $res .= '</form>';\r
+ return $res;\r
+ }\r
+\r
+ public static function autocomplete($args)\r
+ {\r
+ global $core;\r
+\r
+ fb('!!!!');\r
+\r
+ if (isset($_GET['q'])) {\r
+ $args[2] = $_GET['q'];\r
+ }\r
+ $q = mb_strtolower(cubeText::removeAccents($args[2]));\r
+ $suggestions = array();\r
+ if ($args[1] == 'client') {\r
+ $dao = new commonDAOClient($core->con);\r
+ $dao->setSearch($q, true);\r
+ $clients = $dao->getListe();\r
+ foreach ($clients as $client) {\r
+ $suggestions[] = $client->utilisateur_id . ' - ' . $client->rs . ' (' . $client->prenom . ' ' . $client->nom . ')';\r
+ }\r
+ } elseif ($args[1] == 'projet') {\r
+ $dao = new extranetDAOProjet($core->con);\r
+ $dao->setSearch($q, true);\r
+ $projets = $dao->getListe();\r
+ foreach ($projets as $projet) {\r
+ $suggestions[] = $projet->projet_id . ' - ' . $projet->nom . ' (' . $projet->client . ')';\r
+ }\r
+ } elseif ($args[1] == 'book') {\r
+ $dao = new wsDAOBook($core->con);\r
+ $dao->setSearch($q, true);\r
+ $books = $dao->getListe('date', 'DESC', 15, $core->user);\r
+ foreach ($books as $book) {\r
+ $suggestions[] = $book->book_id . ' - ' . $book->nom;\r
+ }\r
+ } elseif ($args[1] == 'wsuser') {\r
+ $dao = new commonDAOUtilisateur($core->con);\r
+ $dao->setSearch($q, true);\r
+ $clients = $dao->getListe('utilisateur_id', 'ASC', null, ' AND ws_grade>0', $core->user);\r
+ foreach ($clients as $client) {\r
+ $suggestions[] = $client->utilisateur_id . ' - ' . $client->rs . ' (' . $client->prenom . ' ' . $client->nom . ')';\r
+ }\r
+ } elseif ($args[1] == 'wsadmin') {\r
+ $dao = new commonDAOUtilisateur($core->con);\r
+ $dao->setSearch($q, true);\r
+ $clients = $dao->getListe('utilisateur_id', 'ASC', null, 'AND ws_grade>2', $core->user);\r
+ foreach ($clients as $client) {\r
+ $suggestions[] = $client->utilisateur_id . ' - ' . $client->rs . ' (' . $client->prenom . ' ' . $client->nom . ')';\r
+ }\r
+ }\r
+ cubeSearch::searchSuggestion($args[2], $suggestions);\r
+ exit;\r
+ }\r
+\r
+ public static function dashboard($args)\r
+ {\r
+ commonDroits::dashboard();\r
+\r
+ cubePage::ui('Sortable');\r
+ $res = commonPage::barre();\r
+ $res .= commonPage::tMain('dash');\r
+ $res .= commonUrl::listeDashboard($args);\r
+ $res .= commonPage::bMain();\r
+ return $res;\r
+ }\r
+\r
+ public static function listeDashboard($args)\r
+ {\r
+ commonDroits::dashboard();\r
+ global $core;\r
+ $r = $core->con->select('SELECT * FROM dashboard WHERE equipier=\'' . $core->user->utilisateur_id . '\' AND site=\'' . MODE . '\' ORDER BY sort');\r
+ $res = '';\r
+ while ($r->fetch()) {\r
+ $res .= '<div class="dashboard" id="dashboard_' . $r->dashboard_id . '">';\r
+ $res .= commonUrl::displayDashboard($r);\r
+ $res .= '</div>';\r
+ }\r
+ return $res;\r
+ }\r
+\r
+ public static function displayDashboard($r)\r
+ {\r
+ commonDroits::dashboard();\r
+ global $core;\r
+ $res = '<div class="caption">' . $core->typo->OngletBlanc($r->nom);\r
+\r
+ $close = ($r->state == '0') ? ' close' : '';\r
+ $hide = ($r->state == '0') ? ' class="close"' : '';\r
+\r
+ $res .= '<a href="#" rel="' . $r->dashboard_id . '" class="toggle' . $close . '">' . cubeMedia::spacer(18, 10) . '</a>';\r
+ $res .= '<a href="#" rel="formDashboard/d/' . $r->dashboard_id . '" class="edit popup">' . cubeMedia::image(IMG . '/edit.png') . '</a>';\r
+ $res .= '<a href="#" rel="delDashboard/' . $r->dashboard_id . '" class="ajax delete" title="' . __('Êtes vous certain de vouloir supprimer cette liste de votre dashboard ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a>';\r
+ $res .= '</div>';\r
+ $res .= commonPage::bh();\r
+ $res .= '<div' . $hide . '>';\r
+\r
+ if ($r->rubrique == 'projets') {\r
+ $res .= extranetUrl::listeProjets($r->dashboard_id, self::getDashboardSettings($r->settings));\r
+ } elseif ($r->rubrique == 'factures') {\r
+ $res .= extranetUrl::listeFactures($r->dashboard_id, self::getDashboardSettings($r->settings));\r
+ } elseif ($r->rubrique == 'devis') {\r
+ $res .= extranetUrl::listeDevis($r->dashboard_id, self::getDashboardSettings($r->settings));\r
+ } elseif ($r->rubrique == 'clients' && MODE == 'extranet') {\r
+ $res .= extranetUrl::listeClients($r->dashboard_id, self::getDashboardSettings($r->settings));\r
+ } elseif ($r->rubrique == 'timereport') {\r
+ $res .= extranetUrl::listeTimereport($r->dashboard_id, self::getDashboardSettings($r->settings));\r
+ } elseif ($r->rubrique == 'demandes') {\r
+ $res .= wsUrl::listeDemandes($r->dashboard_id, self::getDashboardSettings($r->settings));\r
+ } elseif ($r->rubrique == 'books') {\r
+ $res .= wsUrl::listeBooks($r->dashboard_id, self::getDashboardSettings($r->settings));\r
+ }\r
+ $res .= '</div>';\r
+ $res .= commonPage::bf();\r
+\r
+ return $res;\r
+ }\r
+\r
+ public static function getDashboardSettings($s)\r
+ {\r
+ commonDroits::dashboard();\r
+ $s = unserialize($s);\r
+ if (isset($s['filtres']['annee'])) {\r
+ $s['filtres']['annee'] = range(2006, date('Y'), 1);\r
+ }\r
+ return $s;\r
+ }\r
+\r
+ public static function formDashboard($args)\r
+ {\r
+ commonDroits::dashboard();\r
+ global $core;\r
+ $rub = $args[1];\r
+ $dashboard_id = isset($args[2]) ? $args[2] : 'new';\r
+\r
+ if ($dashboard_id == 'new') {\r
+ $res = '<tr><td class="right">Titre de la liste</td><td>' . form::field('nom', 20, 128, false) . form::hidden('rubrique', $rub) . form::hidden('dashboard_id', $dashboard_id) . '</td></tr>';\r
+ } else {\r
+ $r = $core->con->select('SELECT * FROM dashboard WHERE dashboard_id=\'' . $core->con->escape($dashboard_id) . '\'');\r
+ $res = '<tr><td class="right">Titre de la liste</td><td>' . form::field('nom', 20, 128, $r->nom) . form::hidden('dashboard_id', $dashboard_id) . '</td></tr>';\r
+ }\r
+\r
+ return $res;\r
+ }\r
+\r
+ public static function fichiers($args)\r
+ {\r
+ global $core;\r
+\r
+ commonDroits::min(array('extranet' => 0, 'ws' => 1));\r
+\r
+ $settings = $core->user->getSettings('fichiers');\r
+ if ($core->user->ws_grade > 0 && isset($args[1])) {\r
+ $dao = new commonDAOClient($core->con);\r
+ $client = $dao->selectById($args[1]);\r
+ fb($client);\r
+ $_SESSION['entreprise_fichiers'] = $client->entreprise;\r
+ } else {\r
+ unset($_SESSION['entreprise_fichiers']);\r
+ }\r
+\r
+ $shortcuts = array();\r
+ // $shortcuts[] = '<a href="#" class="popup" rel="formProjet/new">' . $core->typo->Ajouter('Créer un projet') . '</a>';\r
+ $filtres = array();\r
+ $res = '';\r
+\r
+ $res .= commonPage::barre();\r
+\r
+ $res .= commonPage::tMain();\r
+ if ($core->user->grade == 0) {\r
+ $res .= self::formFichier();\r
+ } else {\r
+ $res .= self::formFichier($args[1]);\r
+ }\r
+ $res .= commonPage::bh();\r
+ $res .= '<div id="listeFichiers">';\r
+ $res .= self::listeFichiers($settings);\r
+ $res .= '</div>';\r
+ $res .= commonPage::bf();\r
+ $res .= commonPage::bMain();\r
+ return $res;\r
+ }\r
+\r
+ public static function formFichier($for = 'client')\r
+ {\r
+ global $core;\r
+\r
+ if ($for == 'client') {\r
+ $titre = __('Envoyez-nous un fichier');\r
+ $texte = __('Cliquez sur le bouton Parcourir, et sélectionnez le ou les fichiers que vous souhaitez nous faire parvenir');\r
+ } else {\r
+ $dao = new commonDAOClient($core->con);\r
+ $client = $dao->selectById($for);\r
+ $titre = __('Envoyer un fichier à') . ' ' . $client->prenom . ' ' . $client->nom;\r
+ $texte = '';\r
+ }\r
+\r
+ $res = '<div class="dashboard">';\r
+ $res .= '<div class="caption">' . $core->typo->OngletBlancNoDash($titre) . '</div>';\r
+ $res .= commonPage::bh();\r
+ $res .= '<div class="gris form">';\r
+ $res .= '<h1>' . $texte . '</h1>';\r
+\r
+\r
+ if ($for == 'client') {\r
+ $action = SITE_PATH . 'upload';\r
+ } else {\r
+\r
+ $action = SITE_PATH . 'upload/' . $for;\r
+ }\r
+ $res .= '<form id="upload" action="' . $action . '" method="post" enctype="multipart/form-data" class="notajax">';\r
+ $res .= '<input type="file" name="files[]" multiple="multiple" />';\r
+ $res .= '<div class="progress"><div class="back"></div><div class="bar"></div><div class="status">Veuillez sélectionner un ou plusieurs fichier</div> </div><a href="#" class="button">' . __('Parcourir') . '...</a>';\r
+ $res .= '</form>';\r
+ $res .= '</div>';\r
+ $res .= commonPage::bf();\r
+ $res .= '</div>';\r
+ return $res;\r
+ }\r
+\r
+ public static function listeFichiers($settings = null)\r
+ {\r
+ commonDroits::min(array('extranet' => 0, 'ws' => 1));\r
+\r
+ global $core;\r
+ if ($core->user->ws_grade <= 0 && isset($_SESSION['entreprise_fichiers'])) {\r
+ $entreprise = $core->user->entreprise;\r
+ } else {\r
+ $entreprise = $_SESSION['entreprise_fichiers'];\r
+ }\r
+\r
+ $settings = is_null($settings) ? $core->user->getSettings('fichiers') : $settings;\r
+ $dao = new commonDAOFichier($core->con);\r
+ $change = 'Fichiers';\r
+ $dao->entreprise_id = $entreprise;\r
+ if (isset($settings['search']) && !is_null($settings['search'])) {\r
+ $dao->setSearch($settings['search']);\r
+ }\r
+ $liste = $dao->getListe($settings['orderby'], $settings['sens'], $settings['limit']);\r
+\r
+ $res = '<table class="liste">';\r
+ $res .= '<tr><th>' . commonUrl::orderby(__('Nom de fichier'), 'nom', $settings, 'sort' . $change) . '</th>';\r
+ $res .= '<th>' . commonUrl::orderby(__('Type'), 'type', $settings, 'sort' . $change) . '</th>';\r
+ $res .= '<th>' . commonUrl::orderby(__('Taille'), 'taille', $settings, 'sort' . $change) . '</th>';\r
+ $res .= '<th>' . commonUrl::orderby(__('Date'), 'date', $settings, 'sort' . $change) . '</th>';\r
+ $res .= '<th>' . commonUrl::orderby(__('Envoyé par'), 'contact', $settings, 'sort' . $change) . '</th>';\r
+ $res .= '<th>' . commonUrl::orderby(__('Destiné à'), 'destinataire', $settings, 'sort' . $change) . '</th>';\r
+ $res .= '<th class="min"></th><th class="min"></th></tr>';\r
+ $i = 0;\r
+ foreach ($liste as $fichier) {\r
+ $odd = cubeMath::isOdd($i) ? ' class="odd"' : '';\r
+ $res .= '<tr' . $odd . '>';\r
+ $res .= '<td>' . $fichier->nom . '</td>';\r
+ $res .= '<td>' . $fichier->type . '</td>';\r
+ $res .= '<td>' . files::size($fichier->taille) . '</td>';\r
+ $res .= '<td>' . date(__('d/m/Y'), $fichier->date) . '</td>';\r
+ $res .= '<td>' . $fichier->contact->prenom . ' ' . $fichier->contact->nom . '</td>';\r
+ if ($fichier->destinataire) {\r
+ $res .= '<td>' . $fichier->destinataire->prenom . ' ' . $fichier->destinataire->nom . '</td>';\r
+ } else {\r
+ $res .= '<td></td>';\r
+ }\r
+ $res .= '<td>' . self::telechargerLink($fichier) . '</td>';\r
+ $res .= '<td><a href="#" class="ajax" rel="supprimeFichier/' . $fichier->relPath . '" title="' . __('Êtes-vous certain de vouloir supprimer ce fichier ?') . '">' . cubeMedia::image(IMG . '/delete.png') . '</a></td>';\r
+ $res .= '</tr>';\r
+ $i++;\r
+ }\r
+ if (!isset($settings['search']) || is_null($settings['search'])) {\r
+ $odd = cubeMath::isOdd($i) ? ' class="odd"' : '';\r
+ $res .= '<tr' . $odd . '><td colspan="12">';\r
+ $res .= commonPage::pager($settings['page'], $dao->count(), $settings['par_page'], 'page' . $change . '/%d');\r
+ $res .= commonUrl::formParPage('parPage' . $change, $settings['par_page'], __('fichiers'));\r
+ $res .= '</td></tr>';\r
+ }\r
+ $res .= '</table>';\r
+ return $res;\r
+ }\r
+\r
+ public static function telechargerLink($fichier)\r
+ {\r
+ global $core;\r
+ $ext = files::getExtension($fichier->relPath);\r
+\r
+ $res = '';\r
+ if ($ext == 'ipa') {\r
+ $res .= '<a href="itms-services://?action=download-manifest&url=' . self::manifestFromIpa($fichier) . '">' . $core->typo->Telecharger('Installer') . '</a> ';\r
+ }\r
+ $res .= '<a href="' . SITE_PATH . 'telecharger/' . self::hashFile($fichier->relPath) . '/' . $fichier->relPath . '">' . $core->typo->Telecharger('Télécharger') . '</a>';\r
+ return $res;\r
+ }\r
+\r
+ public static function manifestFromIpa($fichier)\r
+ {\r
+ $path = '/cache/iosotamanifest/' . sha1($fichier->relPath) . '/';\r
+ $webpath = SCHEME . '://' . $_SERVER['HTTP_HOST'] . $path;\r
+ $filepath = ROOT . $path;\r
+\r
+ if (!file_exists($filepath)) {\r
+ mkdir($filepath, 0777, true);\r
+ }\r
+\r
+ $res = $webpath . 'manifest.plist';\r
+ $file = $filepath . 'manifest.plist';\r
+ $tmp = $file . '.info';\r
+ $ipa = $fichier->chemin;\r
+\r
+ if (!file_exists($file) || filemtime($ipa) > filemtime($file)) {\r
+ $zip = new ZipArchive();\r
+ $zip->open($fichier->chemin);\r
+ for ($i = 0; $i < $zip->numFiles; $i++) {\r
+ $filename = $zip->getNameIndex($i);\r
+ if (preg_match('|Payload/(.+).app/Info.plist|', $filename, $matches)) {\r
+ $idx = $i;\r
+ break;\r
+ }\r
+ }\r
+ if (!$idx) {\r
+ return;\r
+ }\r
+ $info = $zip->getFromIndex($idx);\r
+\r
+ file_put_contents($tmp, $info);\r
+\r
+\r
+ require_once(ROOT . '/inc/cube/externals/CFPropertyList/CFPropertyList.php');\r
+ $plist = new CFPropertyList\CFPropertyList($tmp);\r
+\r
+ $infos = $plist->toArray();\r
+\r
+ $protocol = 'https';\r
+\r
+ $bundle = $infos['CFBundleIdentifier'];\r
+ $appName = $infos['CFBundleDisplayName'];\r
+ $version = $infos['CFBundleVersion'];\r
+ $ipaURL = $protocol . '://' . $_SERVER['HTTP_HOST'] . '/telechargerr/' . self::hashFile($fichier->relPath . '//') . '/' . $fichier->relPath;\r
+\r
+ $xml = '<?xml version="1.0" encoding="UTF-8"?>\r
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\r
<plist version="1.0">\r
<dict>\r
</dict>\r
</plist>';\r
\r
- file_put_contents($file, $xml);\r
- unlink($tmp);\r
- }\r
- return str_replace('http://', 'https://', $res);\r
- }\r
-\r
- public static function hashFile($path) {\r
- $path = trim($path, '/');\r
- return sha1('!!//' . $path . '||--');\r
- }\r
-\r
- public static function telechargerr($args) {\r
- return self::telecharger($args, true);\r
- }\r
-\r
- public static function telecharger($args, $relay = false) {\r
- array_shift($args);\r
- $hash = array_shift($args);\r
- $path = implode('/', $args);\r
- $utilisateur_id = array_shift($args);\r
- $nom = array_pop($args);\r
-\r
- $verihash = self::hashFile($path);\r
- if ($hash != $verihash) {\r
- return;\r
- }\r
-\r
- cubeHTTP::xsendFile(FTPROOT . $path, false, true);\r
- }\r
-\r
- public static function upload($args) {\r
- global $core;\r
-\r
- commonDroits::min(array('extranet' => 0, 'ws' => 1));\r
-\r
- if (isset($args[1]) && $args[1] != '') {\r
- $for = $args[1];\r
- } else {\r
- $for = false;\r
- }\r
-\r
- if (!$for) {\r
- $destrel = $core->user->utilisateur_id;\r
- } else {\r
- $destrel = $for . '/.in/' . $core->user->utilisateur_id;\r
- }\r
- $dest = FTPROOT . $destrel;\r
- if (!file_exists($dest)) {\r
- mkdir($dest, 0755, true);\r
- }\r
-\r
- $files_uploaded = array();\r
-\r
- print_r($_FILES);\r
-\r
-\r
- foreach ($_FILES['files']['name'] as $k => $ffname) {\r
- if ($_FILES['files']['error'][$k]) {\r
- continue;\r
- }\r
- $fname = cubeFiles::tidyName($ffname);\r
- while (file_exists($dest . '/' . $fname)) {\r
- $name = cubeFiles::getName($fname);\r
- $ext = files::getExtension($fname);\r
-\r
- $name .= '.' . rand(1, 9);\r
- $fname = $name . '.' . $ext;\r
- }\r
-\r
- move_uploaded_file($_FILES['files']['tmp_name'][$k], $dest . '/' . $fname);\r
- $files_uploaded[] = $destrel . '/' . $fname;\r
- }\r
-\r
- if (count($files_uploaded) > 0) {\r
- $mail = new cubeMail();\r
- $mail->charset = 'UTF-8';\r
- $mail->from = FROM_NAME . '<' . FROM_EMAIL . '>';\r
- if (!$for) {\r
- $mail->to = TEAM_EMAIL;\r
- $mail->subject = '[' . EMAIL_SUBJECT . '] Nouveaux fichiers uploadés par ' . $core->user->prenom . ' ' . $core->user->nom;\r
- $body = 'Tous les fichiers de ' . $core->user->prenom . ' ' . $core->user->nom . ' : https://' . $_SERVER['HTTP_HOST'] . '/fichiers/' . $core->user->utilisateur_id . "\n\n";\r
- $body .= 'Fichiers chargés : ' . "\n";\r
- foreach ($files_uploaded as $f) {\r
- $body .= ' - https://' . $_SERVER['HTTP_HOST'] . '/telecharger/' . $f . "\n";\r
- }\r
- } else {\r
- $dao = new commonDAOClient($core->con);\r
- $client = $dao->selectById($for);\r
-\r
- $mail->to = $core->user->email;\r
- $mail->subject = '[' . EMAIL_SUBJECT . '] Nouveaux fichiers uploadés pour ' . $client->prenom . ' ' . $client->nom;\r
-\r
- $body = 'Tous les fichiers de ' . $client->prenom . ' ' . $client->nom . ' : https://' . $_SERVER['HTTP_HOST'] . '/fichiers/' . $client->utilisateur_id . "\n\n";\r
- $body .= 'Fichiers chargés : ' . "\n";\r
- foreach ($files_uploaded as $f) {\r
- $body .= ' - https://' . $_SERVER['HTTP_HOST'] . '/telecharger/' . commonUrl::hashFile($f) . '/' . $f . "\n";\r
- }\r
- $body .= "\n" . RAPPEL . " : \n";\r
- $body .= ' - Adresse : https://' . $_SERVER['HTTP_HOST'] . '/' . "\n";\r
- $body .= ' - Login : ' . $client->email . "\n";\r
- $body .= ' - Mot de passe : ' . $client->password . "\n";\r
- }\r
- $mail->body = $body;\r
- $ok = $mail->send();\r
- }\r
-\r
-\r
- ob_clean();\r
- exit;\r
- }\r
-\r
- public static function adresse($utilisateur_id = null, $projet_id = null, $display = 'devis', $adresse = '') {\r
- global $core;\r
- $dao = new commonDAOClient($core->con);\r
- if (!is_null($utilisateur_id)) {\r
- $client = $dao->selectById($utilisateur_id);\r
- }\r
- if (!is_null($projet_id)) {\r
- $client = $dao->selectByProjet($projet_id);\r
- }\r
- if (is_null($client)) {\r
- return false;\r
- }\r
-\r
- if ($adresse == '') {\r
- $adresse = array();\r
- if ($client->adresse_facturation != '') {\r
- $adresse[] = $client->adresse_facturation;\r
- } else {\r
- $adresse[] = $client->rs;\r
- $adresse[] = trim($client->adresse);\r
- $adresse[] = $client->code_postal . ' ' . $client->ville;\r
- $adresse[] = cubeCountry::getCountry($client->pays);\r
- }\r
- } else {\r
- $adresse = explode("\n", trim($adresse));\r
- }\r
- if ($display == 'facture' && $client->tva_intra != '' && cubeCountry::inUE($client->pays)) {\r
- $tva = '<br /><span class="tva">' . __('N° de TVA Intracommunautaire') . ' : ' . $client->tva_intra . '</span>';\r
- } else {\r
- $tva = '';\r
- }\r
- $a = form::textarea('adresse', 40, 6, implode("\n", $adresse));\r
- $a .= $tva;\r
- $a .= '<a href="#" class="popup edit" rel="formContact/' . $client->utilisateur_id . '" title="' . __('Editer les informations de ce client') . '">' . cubeMedia::image(IMG . '/edit.png') . '</a>';\r
- return $a;\r
- }\r
+ file_put_contents($file, $xml);\r
+ unlink($tmp);\r
+ }\r
+ return str_replace('http://', 'https://', $res);\r
+ }\r
+\r
+ public static function hashFile($path)\r
+ {\r
+ $path = trim($path, '/');\r
+ return sha1('!!//' . $path . '||--');\r
+ }\r
+\r
+ public static function telechargerr($args)\r
+ {\r
+ return self::telecharger($args, true);\r
+ }\r
+\r
+ public static function telecharger($args, $relay = false)\r
+ {\r
+ array_shift($args);\r
+ $hash = array_shift($args);\r
+ $path = implode('/', $args);\r
+ $utilisateur_id = array_shift($args);\r
+ $nom = array_pop($args);\r
+\r
+ $verihash = self::hashFile($path);\r
+ if ($hash != $verihash) {\r
+ return;\r
+ }\r
+\r
+ cubeHTTP::xsendFile(FTPROOT . $path, false, true);\r
+ }\r
+\r
+ public static function upload($args)\r
+ {\r
+ global $core;\r
+\r
+ commonDroits::min(array('extranet' => 0, 'ws' => 1));\r
+\r
+ if (isset($args[1]) && $args[1] != '') {\r
+ $for = $args[1];\r
+ } else {\r
+ $for = false;\r
+ }\r
+\r
+ if (!$for) {\r
+ $destrel = $core->user->utilisateur_id;\r
+ } else {\r
+ $destrel = $for . '/.in/' . $core->user->utilisateur_id;\r
+ }\r
+ $dest = FTPROOT . $destrel;\r
+ if (!file_exists($dest)) {\r
+ mkdir($dest, 0755, true);\r
+ }\r
+\r
+ $files_uploaded = array();\r
+\r
+ print_r($_FILES);\r
+\r
+\r
+ foreach ($_FILES['files']['name'] as $k => $ffname) {\r
+ if ($_FILES['files']['error'][$k]) {\r
+ continue;\r
+ }\r
+ $fname = cubeFiles::tidyName($ffname);\r
+ while (file_exists($dest . '/' . $fname)) {\r
+ $name = cubeFiles::getName($fname);\r
+ $ext = files::getExtension($fname);\r
+\r
+ $name .= '.' . rand(1, 9);\r
+ $fname = $name . '.' . $ext;\r
+ }\r
+\r
+ move_uploaded_file($_FILES['files']['tmp_name'][$k], $dest . '/' . $fname);\r
+ $files_uploaded[] = $destrel . '/' . $fname;\r
+ }\r
+\r
+ if (count($files_uploaded) > 0) {\r
+ $mail = new cubeMail();\r
+ $mail->charset = 'UTF-8';\r
+ $mail->from = FROM_NAME . '<' . FROM_EMAIL . '>';\r
+ if (!$for) {\r
+ $mail->to = TEAM_EMAIL;\r
+ $mail->subject = '[' . EMAIL_SUBJECT . '] Nouveaux fichiers uploadés par ' . $core->user->prenom . ' ' . $core->user->nom;\r
+ $body = 'Tous les fichiers de ' . $core->user->prenom . ' ' . $core->user->nom . ' : https://' . $_SERVER['HTTP_HOST'] . '/fichiers/' . $core->user->utilisateur_id . "\n\n";\r
+ $body .= 'Fichiers chargés : ' . "\n";\r
+ foreach ($files_uploaded as $f) {\r
+ $body .= ' - https://' . $_SERVER['HTTP_HOST'] . '/telecharger/' . $f . "\n";\r
+ }\r
+ } else {\r
+ $dao = new commonDAOClient($core->con);\r
+ $client = $dao->selectById($for);\r
+\r
+ $mail->to = $core->user->email;\r
+ $mail->subject = '[' . EMAIL_SUBJECT . '] Nouveaux fichiers uploadés pour ' . $client->prenom . ' ' . $client->nom;\r
+\r
+ $body = 'Tous les fichiers de ' . $client->prenom . ' ' . $client->nom . ' : https://' . $_SERVER['HTTP_HOST'] . '/fichiers/' . $client->utilisateur_id . "\n\n";\r
+ $body .= 'Fichiers chargés : ' . "\n";\r
+ foreach ($files_uploaded as $f) {\r
+ $body .= ' - https://' . $_SERVER['HTTP_HOST'] . '/telecharger/' . commonUrl::hashFile($f) . '/' . $f . "\n";\r
+ }\r
+ $body .= "\n" . RAPPEL . " : \n";\r
+ $body .= ' - Adresse : https://' . $_SERVER['HTTP_HOST'] . '/' . "\n";\r
+ $body .= ' - Login : ' . $client->email . "\n";\r
+ $body .= ' - Mot de passe : ' . $client->password . "\n";\r
+ }\r
+ $mail->body = $body;\r
+ $ok = $mail->send();\r
+ }\r
+\r
+\r
+ ob_clean();\r
+ exit;\r
+ }\r
+\r
+ public static function adresse($utilisateur_id = null, $projet_id = null, $display = 'devis', $adresse = '')\r
+ {\r
+ global $core;\r
+ $dao = new commonDAOClient($core->con);\r
+ if (!is_null($utilisateur_id)) {\r
+ $client = $dao->selectById($utilisateur_id);\r
+ }\r
+ if (!is_null($projet_id)) {\r
+ $client = $dao->selectByProjet($projet_id);\r
+ }\r
+ if (is_null($client)) {\r
+ return false;\r
+ }\r
+\r
+ if ($adresse == '') {\r
+ $adresse = array();\r
+ if ($client->adresse_facturation != '') {\r
+ $adresse[] = $client->adresse_facturation;\r
+ } else {\r
+ $adresse[] = $client->rs;\r
+ $adresse[] = trim($client->adresse);\r
+ $adresse[] = $client->code_postal . ' ' . $client->ville;\r
+ $adresse[] = cubeCountry::getCountry($client->pays);\r
+ }\r
+ } else {\r
+ $adresse = explode("\n", trim($adresse));\r
+ }\r
+ if ($display == 'facture' && $client->tva_intra != '' && cubeCountry::inUE($client->pays)) {\r
+ $tva = '<br /><span class="tva">' . __('N° de TVA Intracommunautaire') . ' : ' . $client->tva_intra . '</span>';\r
+ } else {\r
+ $tva = '';\r
+ }\r
+ $a = form::textarea('adresse', 40, 6, implode("\n", $adresse));\r
+ $a .= $tva;\r
+ $a .= '<a href="#" class="popup edit" rel="formContact/' . $client->utilisateur_id . '" title="' . __('Editer les informations de ce client') . '">' . cubeMedia::image(IMG . '/edit.png') . '</a>';\r
+ return $a;\r
+ }\r
\r
}
\ No newline at end of file