From: vincent@cubedesigners.com Date: Thu, 20 Jun 2013 12:58:26 +0000 (+0000) Subject: (no commit message) X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=5dad07f820f86dd571f95b43c017ac1e4d1d9bc0;p=cubeextranet.git --- diff --git a/inc/commons/class.common.core.php b/inc/commons/class.common.core.php index b57e596ce..61489320f 100644 --- a/inc/commons/class.common.core.php +++ b/inc/commons/class.common.core.php @@ -436,6 +436,19 @@ class commonCore extends cubeCore { $db->book_collection_compile->compile_date('integer', 0, false); $db->book_collection_compile->online('integer', 0, false); $db->book_collection_compile->primary('book_collection_compile', 'collection_id', 'compile_date'); + + // Table des notification push + $db->book_collection_push->collection_id('integer', 0, false); + $db->book_collection_push->platform('varchar', 16, false); + $db->book_collection_push->token('varchar', 128, false); + $db->book_collection_push->locale('varchar', 8, false); + $db->book_collection_push->env('varchar', 32, false); + $db->book_collection_push->datas('text', 0, false); + $db->book_collection_push->last_visit('integer', 0, false); + $db->book_collection_push->primary('pk_book_collection_push', 'collection_id', 'token'); + $db->book_collection_push->index('idx_book_collection_push_platform', 'BTREE', 'platform'); + $db->book_collection_push->index('idx_book_collection_push_token', 'BTREE', 'token'); + // Table des droits $db->ws_users_tree->utilisateur_id('integer', 0, false); $db->ws_users_tree->entreprise_id('integer', 0, false); diff --git a/inc/commons/class.common.tools.php b/inc/commons/class.common.tools.php index 9660bd8a5..9eb896a16 100644 --- a/inc/commons/class.common.tools.php +++ b/inc/commons/class.common.tools.php @@ -678,7 +678,7 @@ class commonTools { $e = explode('.', $_FILES['cert']['name']); array_pop($e); - $base = implode('.', $e); + $base = CubeIT_Text::str2URL(implode('.', $e)); $pem = $tmp . '/' . $base . '.pem'; $p12 = $tmp . '/' . $base . '.p12'; @@ -710,7 +710,7 @@ class commonTools { $openssl->setPath(CONVERTER_PATH); $openssl->setEnv('RANDFILE', $tmp . '/.rnd'); $openssl->setArg(null, 'pkcs12'); - $openssl->setArg('-password', 'pass:'); + $openssl->setArg('-password', 'pass:' . $_POST['password']); $openssl->setArg('-in', $p12); $openssl->setArg('-out', $pem); $openssl->setArg('-nodes'); @@ -752,10 +752,8 @@ class commonTools { $openssl->setArg(null, '2048'); $openssl->execute(); - // Generate csr // openssl req -new -key mykey.key -out CertificateSigningRequest.certSigningRequest -subj "/emailAddress=yourAddress@example.com, CN=John Doe, C=US" - $openssl = new cubeCommandLine('openssl'); $openssl->setPath(CONVERTER_PATH); $openssl->setArg(null, 'req'); diff --git a/inc/ws/Controlleur/class.ws.ajax.php b/inc/ws/Controlleur/class.ws.ajax.php index 2272fec07..b3108e808 100644 --- a/inc/ws/Controlleur/class.ws.ajax.php +++ b/inc/ws/Controlleur/class.ws.ajax.php @@ -209,6 +209,18 @@ class wsAjax extends cubeAjax { $save = $_POST; $datas = array(); + + $dir = WS_COLLECTIONS . '/apns/' . $_POST['collection_id']; + if (!file_exists($dir)) { + mkdir($dir, 0777, true); + } + if (isset($_FILES['apns_dev'])) { + move_uploaded_file($_FILES['apns_dev']['tmp_name'], $dir . '/apns_dev.pem'); + } + if (isset($_FILES['apns_prod'])) { + move_uploaded_file($_FILES['apns_prod']['tmp_name'], $dir . '/apns_prod.pem'); + } + foreach ($_POST['group'] as $gid => $group) { if ($gid && $gid == 'new_') { continue; @@ -1141,6 +1153,36 @@ class wsAjax extends cubeAjax { $exporter->exportCollection($id, $os); } + public static function publishCollection($args, &$x) { + global $core; + $collection = $args[1]; + + $env = Zend_Mobile_Push_Apns::SERVER_SANDBOX_URI; + + // Notifications + + $apns = new Zend_Mobile_Push_Apns(); + if ($env == Zend_Mobile_Push_Apns::SERVER_SANDBOX_URI) { + $c = 'dev'; + } else { + $c = 'prod'; + } + $apns->setCertificate(WS_COLLECTIONS . '/apns/' . $args[1] . '/apns_' . $c . '.pem'); + $apns->setCertificatePassphrase('apns'); + $apns->connect($env); + + $r = $core->con->select('SELECT token FROM book_collection_push WHERE platform=\'ios\' AND collection_id = \'' . $core->con->escape($collection) . '\''); + while ($r->fetch()) { + $m = new Zend_Mobile_Push_Message_Apns(); + $m->setBadge(5); + $m->setToken($r->token); + $m->setSound('none'); + $m->setId(microtime(true) * 1000); + $apns->send($m); + } + $apns->close(); + } + } ?> \ No newline at end of file diff --git a/inc/ws/Controlleur/class.ws.services.php b/inc/ws/Controlleur/class.ws.services.php index 7176a8521..a4b65a299 100644 --- a/inc/ws/Controlleur/class.ws.services.php +++ b/inc/ws/Controlleur/class.ws.services.php @@ -558,6 +558,23 @@ class wsServices extends cubeFlashGateway { exit; } + public function collectionPushRegister() { + global $core; + + $c = $core->con->openCursor('book_collection_push'); + $c->collection_id = $_POST['id']; + $c->token = $_POST['token']; + $c->datas = $_POST['datas']; + $c->platform = $_POST['platform']; + $c->locale = $_POST['locale']; + $c->last_visit = TIME; + try { + $c->insert(); + } catch (Exception $e) { + $c->update('WHERE collection_id=\'' . $core->con->escape($_POST['id']) . '\' AND token=\'' . $core->con->escape($_POST['token']) . '\''); + } + } + } ?> \ No newline at end of file diff --git a/inc/ws/Controlleur/class.ws.url.php b/inc/ws/Controlleur/class.ws.url.php index 5a05a1468..4e570de2e 100644 --- a/inc/ws/Controlleur/class.ws.url.php +++ b/inc/ws/Controlleur/class.ws.url.php @@ -231,7 +231,7 @@ class wsUrl { global $core; $res = '

Gestion de la collection « ' . $collection->nom . ' » # ' . $collection->collection_id . '

'; - $res.='
'; + $res.=''; $res.='#' . form::hidden('collection_id', $collection->collection_id) . $collection->collection_id . ''; $res.='' . __('Nom de la collection') . '' . form::field('nom', 20, 64, $collection->nom) . ''; @@ -297,6 +297,8 @@ class wsUrl { $res.=''; $res.=''; $res.=''; + $res.=''; + $res.=''; $res.='
' . __('Version phonegap') . '' . form::combo(array('settings[phonegap]', 'phonegap'), $phonegapVersions, $collection->settings['phonegap']) . '
' . __('Identifiant de l\'application') . '' . form::field(array('settings[namespace]', 'namespace'), 64, 64, $collection->settings['namespace']) . '
' . __('Certificat APNS') . ' Dev (' . __('Fichier .pem') . ')
' . __('Certificat APNS') . ' Prod (' . __('Fichier .pem') . ')
'; @@ -314,6 +316,7 @@ class wsUrl { $res.='

'; $res.='

' . __('Versions') . '

'; + $res.='' . $core->typo->Ajouter(__('Publier et notifier les utilisateurs')) . ''; $res.='

' . __('Export') . '

'; $res.='' . $core->typo->Ajouter(__('Exporter pour Android')) . ' ' . $core->typo->Ajouter(__('Exporter pour iOS')) . ''; diff --git a/inc/ws/Util/class.ws.exporter.php b/inc/ws/Util/class.ws.exporter.php index dc5608b8b..cc3322824 100644 --- a/inc/ws/Util/class.ws.exporter.php +++ b/inc/ws/Util/class.ws.exporter.php @@ -29,25 +29,40 @@ class wsExporter { protected function _createProject($os, $name, $ns) { if ($os == 'ios') { - $dir = '/Phonegap/Projects/' . str_replace('.', '/', $ns); + $dir = $this->_iosProjectDir($ns); $sdir = '/mnt/macbox' . $dir; - if (file_exists($sdir)) { - return; + if (!file_exists($sdir)) { + `sudo /usr/local/bin/remountmac`; + mkdir($sdir, 0777, true); + $cl = new CubeIT_CommandLine('/Phonegap/Cordova/bin/create'); + $cl->setArg(null, $dir); + $cl->setArg(null, $ns); + $cl->setArg(null, CubeIT_Text::str2URL($name)); + $cl->setSSH('paris.cubedesigners.com', 'vincent', '', 22022); + $cl->execute(); + // Install plugins + $this->_iosPlugin($dir, 'PushPlugin'); + $this->_iosPlugin($dir, 'ExternalFileUtil'); } - `sudo /usr/local/bin/remountmac`; - mkdir($sdir, 0777, true); - $cl = new CubeIT_CommandLine('/Phonegap/Cordova/bin/create'); - $cl->setArg('shared'); - $cl->setArg(null, $dir); - $cl->setArg(null, $ns); - $cl->setArg(null, CubeIT_Text::str2URL($name)); - $cl->setSSH('paris.cubedesigners.com', 'vincent', '', 22022); - $cl->execute(); } elseif ($os == 'android') { } } + protected function _iosProjectDir($ns) { + return '/Phonegap/Projects/' . str_replace('.', '/', $ns); + } + + protected function _iosPlugin($dir, $plugin) { + // git@github.com:phonegap-build/PushPlugin.git + $cl = new CubeIT_CommandLine('/usr/local/bin/plugman'); + $cl->setManualArg('--platform ios'); + $cl->setManualArg('--project ' . $dir); + $cl->setManualArg('--plugin /Phonegap/Plugins/' . $plugin); + $cl->setSSH('paris.cubedesigners.com', 'vincent', '', 22022); + $cl->execute(); + } + public function export($book_id, &$x, $action = 'download', $version = 'online', $destinationDir = null, $destinationFile = null) { global $core; @@ -106,7 +121,7 @@ class wsExporter { $root = 'fluidbook@fluidbook.com:/home/fluidbook/www/references/'; $rootURL = 'http://www.fluidbook.com/references/'; } else if ($this->action == 'hosting') { - $root = '/home/fluidbook/hosting/'; + $root = 'fluidbook@hosting.fluidbook.com:/home/fluidbook/hosting/'; $rootURL = 'http://hosting.fluidbook.com/'; } else if ($this->action == 'ftp') { $root = 'ftp://';