Commit 5e8d4410 authored by Indra Raja's avatar Indra Raja

pusher.js

parent 0a7e6077
This diff is collapsed.
...@@ -166,6 +166,7 @@ return [ ...@@ -166,6 +166,7 @@ return [
Controller\UmumController::class => Factory\UmumControllerFactory::class, Controller\UmumController::class => Factory\UmumControllerFactory::class,
// Master\GlobalActionController::class => Factory\GlobalActionControllerFactory::class, // Master\GlobalActionController::class => Factory\GlobalActionControllerFactory::class,
Controller\ApiController::class => Factory\ApiControllerFactory::class, Controller\ApiController::class => Factory\ApiControllerFactory::class,
// Controller\ApiController::class => InvokableFactory::class, // Controller\ApiController::class => InvokableFactory::class,
], ],
], ],
......
...@@ -11,8 +11,12 @@ use Zend\Mvc\Controller\AbstractActionController; ...@@ -11,8 +11,12 @@ use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel; use Zend\View\Model\ViewModel;
use Khansia\Generic\Result; use Khansia\Generic\Result;
class AdminController extends \Application\Master\GlobalActionController class AdminController extends \Application\Master\GlobalActionController
{ {
public function __construct($headScript) public function __construct($headScript)
{ {
$this->headScript = $headScript; $this->headScript = $headScript;
...@@ -31,6 +35,8 @@ class AdminController extends \Application\Master\GlobalActionController ...@@ -31,6 +35,8 @@ class AdminController extends \Application\Master\GlobalActionController
$uri = $this->getRequest()->getUri(); $uri = $this->getRequest()->getUri();
$baseurl = sprintf('//%s', $uri->getHost()); $baseurl = sprintf('//%s', $uri->getHost());
$this->headScript->appendScript(' var baseURL = "' . $baseurl . '"'); $this->headScript->appendScript(' var baseURL = "' . $baseurl . '"');
$this->headScript->appendFile('/action-js/antrian-js/action-dasboaard.js'); $this->headScript->appendFile('/action-js/antrian-js/action-dasboaard.js');
...@@ -43,7 +49,9 @@ class AdminController extends \Application\Master\GlobalActionController ...@@ -43,7 +49,9 @@ class AdminController extends \Application\Master\GlobalActionController
} }
public function antrianadminAction() public function antrianadminAction()
{ {
$this->isLoggedIn(); $this->isLoggedIn();
$view = new ViewModel(); $view = new ViewModel();
$result = new Result(); $result = new Result();
...@@ -52,38 +60,12 @@ class AdminController extends \Application\Master\GlobalActionController ...@@ -52,38 +60,12 @@ class AdminController extends \Application\Master\GlobalActionController
$baseurl = sprintf('//%s', $uri->getHost()); $baseurl = sprintf('//%s', $uri->getHost());
$getpath = explode("/",$uri->getPath()); $getpath = explode("/",$uri->getPath());
// echo "<pre>"; // echo "<pre>";
$id = $getpath[3];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "http://queue.indra/api/nextantrian",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => array('inoantrian' => '7','idok' => '74','istatus' => '40'),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
$data = $this->getRequest()->getPost('');
print_r($data);
$this->headScript->appendScript(' var baseURL = "' . $baseurl . '"'); $this->headScript->appendScript(' var baseURL = "' . $baseurl . '"');
$this->headScript->appendScript(' var id = "' . $id . '"');
$this->headScript->appendFile('/action-js/antrian-js/action-admin.js'); $this->headScript->appendFile('/action-js/antrian-js/action-admin.js');
$this->layout("slayout/layoutAdmin"); $this->layout("layout/layoutAdmin");
return $view; return $view;
} }
public function registrasidokterAction() public function registrasidokterAction()
......
...@@ -10,6 +10,10 @@ namespace Application\Controller; ...@@ -10,6 +10,10 @@ namespace Application\Controller;
use Zend\Mvc\Controller\AbstractActionController; use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel; use Zend\View\Model\ViewModel;
use Khansia\Generic\Result; use Khansia\Generic\Result;
use ZfrPusher\Client\Credentials;
use ZfrPusher\Client\PusherClient;
use ZfrPusher\Service\PusherService;
class UmumController extends \Application\Master\GlobalActionController class UmumController extends \Application\Master\GlobalActionController
{ {
...@@ -41,6 +45,8 @@ class UmumController extends \Application\Master\GlobalActionController ...@@ -41,6 +45,8 @@ class UmumController extends \Application\Master\GlobalActionController
{ {
$view = new ViewModel(); $view = new ViewModel();
$result = new Result(); $result = new Result();
$today = gmdate("d M Y ", time()+60*60*7); $today = gmdate("d M Y ", time()+60*60*7);
...@@ -53,23 +59,9 @@ class UmumController extends \Application\Master\GlobalActionController ...@@ -53,23 +59,9 @@ class UmumController extends \Application\Master\GlobalActionController
// echo "<pre>"; // echo "<pre>";
$decodeid = base64_decode($getpath[3]); $decodeid = base64_decode($getpath[3]);
curl_setopt_array($curl, array(
CURLOPT_URL => "http://queue.indra/api/nextantrian",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => array('inoantrian' => '7','idok' => '74','istatus' => '40'),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
// $data = $this->getRequest()->getRawBody(); // $data = $this->getRequest()->getRawBody();
......
...@@ -130,6 +130,12 @@ class Param extends Mapper { ...@@ -130,6 +130,12 @@ class Param extends Mapper {
$data = $this->_storage->loadantrianmiss($id); $data = $this->_storage->loadantrianmiss($id);
return $data; return $data;
} }
public function loadantrianregister($id = null){
$data = $this->_storage->loadantrianregister($id);
return $data;
}
public function loadPoli($id_poli = null){ public function loadPoli($id_poli = null){
$data = $this->_storage->loadPoli($id_poli); $data = $this->_storage->loadPoli($id_poli);
return $data; return $data;
......
...@@ -1230,7 +1230,60 @@ class Mysql extends \Khansia\Db\Storage implements Skeleton { ...@@ -1230,7 +1230,60 @@ class Mysql extends \Khansia\Db\Storage implements Skeleton {
$result->info = 'ERROR : ' . $ex->getMessage(); $result->info = 'ERROR : ' . $ex->getMessage();
} }
return $result; return $result;
} }
public function loadantrianregister($id = null){
$result = new Result();
try {
$sql = " SELECT register_dokter.id_register, dokter_to_poli.nama_dokter, poli.nama_poli, ruang.nama_ruang,register_dokter.antrian_all,register_dokter.waktu_antrian, register_dokter.jam_mulai, register_dokter.create_date
FROM register_dokter
INNER JOIN poli
ON register_dokter.id_poli = poli.id_poli
INNER JOIN dokter_to_poli
ON register_dokter.id_dokter = dokter_to_poli.id_dokter
INNER JOIN ruang
ON register_dokter.id_ruang = ruang.id_ruang
Where register_dokter.create_date = CURRENT_DATE
";
if($id){
$sql .= " AND register_dokter.id_register= $id AND register_dokter.id_register IS NOT NULL" ;
}
$sql .= " ORDER BY poli.nama_poli asc , register_dokter.create_date";
// print_r($sql);die;
$stmt = $this->_db->query($sql);
$resdata = $stmt->execute();
$listdata = array();
foreach($resdata as $val){
// print_r($val);die;
array_push($listdata, $val);
}
if ($listdata) {
$result->code = 0;
$result->info = 'OK';
$result->data = $listdata;
}else{
$result->code = 1;
$result->info = 'nok';
}
}catch (\Zend\Db\Adapter\Exception\RuntimeException $ex) {
$result->code = 3;
$result->info = 'ERROR : ' . $ex->getMessage();
}catch (\Exception $ex) {
$result->code = 4;
$result->info = 'ERROR : ' . $ex->getMessage();
}
return $result;
}
public function loadantrianmiss($id){ public function loadantrianmiss($id){
$result = new Result(); $result = new Result();
try { try {
......
<!-- Page header --> <!-- Page header -->
<div class="row"> <div class="row">
<div class="page-header" style="border-bottom: 0px solid #ddd0;"> <div class="page-header" style="border-bottom: 0px solid #ddd0;">
...@@ -20,18 +21,24 @@ ...@@ -20,18 +21,24 @@
</div> </div>
</div> </div>
<div class="justify-content-center"> <div class="justify-content-center">
<div class="col-sm-200" > <div class="col-sm-200" >
<audio id="MyAudioElement" autoplay>
<source src="a1.mp3" type="audio/ogg">
<source src="a1.mp3" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
<div class="card mb-3 alert alert-info alert-styled-left alert-arrow-left alert-component col-sm-100" style="border-color: #e94c72;background: #faebd73b;width: 1300px;margin-left: 100px;"> <div class="card mb-3 alert alert-info alert-styled-left alert-arrow-left alert-component col-sm-100" style="border-color: #e94c72;background: #faebd73b;width: 1300px;margin-left: 100px;">
<div class="text-center content-group"> <div class="text-center content-group">
<div><input type="hidden" value="nomer antrian" id="text-to-speech" placeholder="Enter text to speak..."/></div> <div><input type="hidden" value="nomer antrian" id="text-to-speech" placeholder="Enter text to speak..."/></div>
<p class="error-title" style=" font-weight: ;font-size:50px;font-family: Times New Roman, Times, serif;color: #fff"><span > Nomer</span></p> <p class="error-title" style=" font-weight: ;font-size:50px;font-family: Times New Roman, Times, serif;color: #fff"><span > Nomer</span></p>
<h1 class="error-title" style=" font-weight: bold;font-size:100px;font-family: Times New Roman, Times, serif;color: #fff"><span id="no_antrian"></span></h1> <h1 class="error-title" style=" font-weight: bold;font-size:100px;font-family: Times New Roman, Times, serif;color: #fff"><span id="no_antrian_panggil"></span></h1>
<p class="error-title" style=" font-weight: ;font-size:50px;font-family: Times New Roman, Times, serif;color: #fff"><span > Please Proceed To</span></p> <p class="error-title" style=" font-weight: ;font-size:50px;font-family: Times New Roman, Times, serif;color: #fff"><span > Silahkan Menuju Ke</span></p>
<p class="error-title" style=" font-weight: ;font-size:50px;font-family: Times New Roman, Times, serif;color: #fff"><span id="ruang"></span></p> <p class="error-title" style=" font-weight: ;font-size:50px;font-family: Times New Roman, Times, serif;color: #fff"><span id="ruang_panggil"></span></p>
<!-- <div><input type="hidden" value="no_antrian" id="no_antrian" /></div> <!-- <div><input type="hidden" value="no_antrian" id="no_antrian" /></div>
<div><input type="hidden" value="nama_ruang" id="nama_ruang" /><span style="visibility:hidden" id="nama_ruang"></span></div> --> <div><input type="hidden" value="nama_ruang" id="nama_ruang" /><span style="visibility:hidden" id="nama_ruang"></span></div> -->
...@@ -43,7 +50,6 @@ ...@@ -43,7 +50,6 @@
</div> </div>
</div> </div>
<!-- <!--
......
<div class="container"></div> <div class="container"></div>
<form class="form-inline"> <form class="form-inline">
<div class="form-group form-control-lg "> <div class="form-group form-control-lg ">
...@@ -25,7 +26,7 @@ ...@@ -25,7 +26,7 @@
</div> </div>
<div class="text-center content-group"> <div class="text-center content-group">
<div><input type="hidden" value="nomer antrian" id="text-to-speech" placeholder="Enter text to speak..."/></div> <div><input type="hidden" value="nomer antrian" id="text-to-speech" placeholder="Enter text to speak..."/></div>
<h1 class="error-title" style=" font-weight: bold;font-size:250px;font-family: Times New Roman, Times, serif;color: #808080"><span id="no_antrian"></span></h1> <h1 class="error-title" style=" font-weight: bold;font-size:243px;font-family: Times New Roman, Times, serif;color: #808080"><span id="no_antrian"></span></h1>
</div> </div>
<div><input type="hidden" value="no_antrian" id="no_antrian" /></div> <div><input type="hidden" value="no_antrian" id="no_antrian" /></div>
......
...@@ -74,20 +74,6 @@ ...@@ -74,20 +74,6 @@
<label>Antrian Seluruh</label> <label>Antrian Seluruh</label>
<input type="number" id="antrian_all" name="antrian_all" class="form-control" required /></input> <input type="number" id="antrian_all" name="antrian_all" class="form-control" required /></input>
</div> </div>
<div class="row col-lg-12">
<div class="form-group">
<label>Antrian Awal(mobile)</label>
<input style="width: 221px;" type="number" id="antrian_awal" name="antrian_awal" class="form-control" required /></input>
</div>
<div class="col-lg-6 sm-7">
<div class="form-group">
<label>Antrian Akhir(mobile)</label>
<input style="width: 230px;" type="number" id="antrian_akhir" name="antrian_akhir" class="form-control" required /></input>
</div>
</div>
</div>
<div class="row col-lg-12"> <div class="row col-lg-12">
<div class="form-group"> <div class="form-group">
<label>Waktu Mulai Antrian</label> <label>Waktu Mulai Antrian</label>
...@@ -161,20 +147,7 @@ ...@@ -161,20 +147,7 @@
<label>Antrian Seluruh</label> <label>Antrian Seluruh</label>
<input type="number" id="antrian_alledt" name="antrian_all" class="form-control" required /></input> <input type="number" id="antrian_alledt" name="antrian_all" class="form-control" required /></input>
</div> </div>
<div class="row col-lg-12">
<div class="form-group">
<label>Antrian Awal(mobile)</label>
<input style="width: 221px;" type="number" id="antrian_awaledt" name="antrian_awal" class="form-control" required /></input>
</div>
<div class="col-lg-6 sm-7">
<div class="form-group">
<label>Antrian Akhir(mobile)</label>
<input style="width: 230px;" type="number" id="antrian_akhiredt" name="antrian_akhir" class="form-control" required /></input>
</div>
</div>
</div>
<div class="row col-lg-12"> <div class="row col-lg-12">
<div class="form-group"> <div class="form-group">
<label>Waktu Mulai Antrian</label> <label>Waktu Mulai Antrian</label>
......
...@@ -208,6 +208,7 @@ ...@@ -208,6 +208,7 @@
<?= $this->headScript()?> <?= $this->headScript()?>
<script src="<?php $this->basePath();?>/tamplateadmin/js/sb-admin-2.min.js"></script> <script src="<?php $this->basePath();?>/tamplateadmin/js/sb-admin-2.min.js"></script>
<script src="<?php $this->basePath();?>/js/jquery-clock-timepicker.min.js"></script> <script src="<?php $this->basePath();?>/js/jquery-clock-timepicker.min.js"></script>
<script src="<?php $this->basePath();?>/tamplateadmin/vendor/datatables/jquery.dataTables.min.js"></script> <script src="<?php $this->basePath();?>/tamplateadmin/vendor/datatables/jquery.dataTables.min.js"></script>
<script src="<?php $this->basePath();?>/tamplateadmin/vendor/datatables/dataTables.bootstrap4.min.js"></script> <script src="<?php $this->basePath();?>/tamplateadmin/vendor/datatables/dataTables.bootstrap4.min.js"></script>
......
...@@ -87,7 +87,11 @@ ...@@ -87,7 +87,11 @@
<?= $this->headScript() <?= $this->headScript()
->prependFile($this->basePath('js/bootstrap.min.js')) ->prependFile($this->basePath('js/bootstrap.min.js'))
->prependFile($this->basePath('js/jquery-3.1.0.min.js')) ->prependFile($this->basePath('js/jquery-3.1.0.min.js'))
->prependFile(('https://js.pusher.com/7.0/pusher.min.js'))
?> ?>
......
...@@ -2,23 +2,24 @@ ...@@ -2,23 +2,24 @@
/* JS comes here */ /* JS comes here */
/* JS comes here */ /* JS comes here */
function textToAudio() { function textToAudio() {
// let msg1 = "nomor antrian";
let no_antrian = document.getElementById("no_antrian").innerHTML; let no_antrian = document.getElementById("no_antrian").innerHTML;
let voice = "nomor antrian " + no_antrian; let voice = "nomor antrian " + no_antrian;
console.log(voice) console.log(voice)
let speech = new SpeechSynthesisUtterance(); let speech = new SpeechSynthesisUtterance();
speech.lang = "id"; speech.lang = "id";
speech.text = voice; speech.text = voice;
speech.volume = 1; speech.volume = 1;
speech.rate = 0.70; speech.rate = 0.70;
speech.pitch = 1; speech.pitch = 1;
window.speechSynthesis.speak(speech); window.speechSynthesis.speak(speech);
} }
function textToAudioRuang() { function textToAudioRuang() {
// let msg1 = "nomor antrian"; // let msg1 = "nomor antrian";
...@@ -31,12 +32,12 @@ function textToAudioRuang() { ...@@ -31,12 +32,12 @@ function textToAudioRuang() {
console.log(voice) console.log(voice)
let speech = new SpeechSynthesisUtterance(); let speech = new SpeechSynthesisUtterance();
speech.lang = "id"; speech.lang = "id";
speech.text = voice; speech.text = voice;
speech.volume = 1; speech.volume = 1;
speech.rate = 0.70; speech.rate = 0.70;
speech.pitch = 1; speech.pitch = 1;
window.speechSynthesis.speak(speech); window.speechSynthesis.speak(speech);
} }
...@@ -83,18 +84,7 @@ $('#poli').on('change', function () { ...@@ -83,18 +84,7 @@ $('#poli').on('change', function () {
}); });
}); });
$( '#dokter' ).on( "change", function() {
$id_dokter =$('#dokter').val();
window.location.href = ("/admin/antrianadmin/" +$id_dokter);
});
if(window.location.pathname == "/admin/antrianadmin/" +id){
$( window ).on( "load", function() {
tampilangka(id)
loadantrian(id)
});
}
function loadpoli() { function loadpoli() {
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
...@@ -133,15 +123,14 @@ function loadpoli() { ...@@ -133,15 +123,14 @@ function loadpoli() {
}); });
} }
function loadantrian() {
function loadantrian(id) { var iddokter = $('#dokter').val();
$iddok= $('#dokter').val();
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
dataType: 'json', dataType: 'json',
url: baseURL + '/api/loadAntrianAdmin', url: baseURL + '/api/loadAntrianAdmin',
data: { data: {
iid: id, id: iddokter
}, },
...@@ -154,7 +143,7 @@ function loadantrian(id) { ...@@ -154,7 +143,7 @@ function loadantrian(id) {
if (result.code == 0) { if (result.code == 0) {
let data = result.data; let data = result.data;
console.log(data); console.log(data);
let counter = 1; let counter = 1;
for (x in data) { for (x in data) {
...@@ -188,17 +177,23 @@ function loadantrian(id) { ...@@ -188,17 +177,23 @@ function loadantrian(id) {
} }
$('#dokter').on('change', function () {
loadantrian();
tampilangka();
});
$('#no_antrian').html('-'); $('#no_antrian').html('-');
function tampilangka(id) { function tampilangka() {
var iddokter = $('#dokter').val();
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
dataType: 'json', dataType: 'json',
url: baseURL + '/api/loadNoAntrian', url: baseURL + '/api/loadNoAntrian',
data: { data: {
id_dokter: id, id_dokter: iddokter,
}, },
async: false, async: false,
...@@ -271,40 +266,39 @@ function tampilangka(id) { ...@@ -271,40 +266,39 @@ function tampilangka(id) {
$('#btnNext').on('click', function () { $('#btnNext').on('click', function () {
actionqueue(noantrian + 1, 20,id); actionqueue(noantrian + 1, 20);
loadantrian() loadantrian()
}); });
$('#btnCall').on('click', function () { $('#btnCall').on('click', function () {
actionqueue(noantrian, 30,id); actionqueue(noantrian, 30);
}); });
$('#btnDone').on('click', function () { $('#btnDone').on('click', function () {
actionqueue(noantrian, 50,id); actionqueue(noantrian, 50);
}); });
$('#btnMissed').on('click', function () { $('#btnMissed').on('click', function () {
actionqueue(noantrian, 60,id); actionqueue(noantrian, 60);
}); });
$('#btnServed').on('click', function () { $('#btnServed').on('click', function () {
actionqueue(noantrian, 40,id); actionqueue(noantrian, 40);
}); });
function actionqueue(antrianno, status, iddok) { function actionqueue(antrianno, status) {
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
dataType: 'json', dataType: 'json',
url: baseURL + '/api/nextantrian', url: baseURL + '/api/nextantrian',
data: { data: {
inoantrian: antrianno, inoantrian: antrianno,
istatus: status,
idok: iddok, idok: iddok,
istatus: status
}, },
success: function (result) { success: function (result) {
...@@ -317,9 +311,9 @@ function actionqueue(antrianno, status, iddok) { ...@@ -317,9 +311,9 @@ function actionqueue(antrianno, status, iddok) {
html: true, html: true,
type: "warning" type: "warning"
}); });
$('#no_antrian').html('-');
return false; return false;
} }
if (status == 20) { if (status == 20) {
...@@ -342,20 +336,8 @@ function actionqueue(antrianno, status, iddok) { ...@@ -342,20 +336,8 @@ function actionqueue(antrianno, status, iddok) {
} else if (status == 30) { } else if (status == 30) {
// SOound call // SOound call
var flush = new Audio('../../data/tone/a1.mp3');
setTimeout(function() {
flush.play(); }, )
flush.onended = function() {
textToAudio()
setTimeout(function() {
textToAudioRuang() }, 3000)
};
swal({ swal({
title: "Call!", title: "Call!",
text: "Sedang Melakukan Panggilan", text: "Sedang Melakukan Panggilan",
...@@ -364,6 +346,21 @@ function actionqueue(antrianno, status, iddok) { ...@@ -364,6 +346,21 @@ function actionqueue(antrianno, status, iddok) {
timer: 14000 timer: 14000
}); });
var flush = new Audio('../../data/tone/a1.mp3');
flush.muted = true;
setTimeout(function() {
flush.muted = false;
flush.play() }, )
flush.onended = function() {
textToAudio()
setTimeout(function() {
textToAudioRuang() }, 3000)
};
$('#btnNext').prop('disabled', true); $('#btnNext').prop('disabled', true);
...@@ -400,4 +397,4 @@ function actionqueue(antrianno, status, iddok) { ...@@ -400,4 +397,4 @@ function actionqueue(antrianno, status, iddok) {
} }
}); });
} }
\ No newline at end of file
...@@ -253,16 +253,14 @@ $('#pilihno').on('click', function () { ...@@ -253,16 +253,14 @@ $('#pilihno').on('click', function () {
}); });
function pilihAntrian() { function pilihAntrian() {
var $dokter = $('#dokter option:selected').attr("value"); var dokter = $('#dokter option:selected').attr("value");
$.ajax({ $.ajax({
type: 'POST', type: 'POST',
dataType: 'json', dataType: 'json',
url: baseURL + '/api/loadPilihAntrian', url: baseURL + '/api/loadPilihAntrian',
data: { data: {
iddok: $dokter, iddok: dokter,
}, },
success: function (response) { success: function (response) {
......
...@@ -2,9 +2,13 @@ ...@@ -2,9 +2,13 @@
dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../zendframework/zend-servicemanager/bin" && pwd) dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../zendframework/zend-servicemanager/bin" && pwd)
if [ -d /proc/cygdrive ] && [[ $(which php) == $(readlink -n /proc/cygdrive)/* ]]; then if [ -d /proc/cygdrive ]; then
# We are in Cgywin using Windows php, so the path must be translated case $(which php) in
dir=$(cygpath -m "$dir"); $(readlink -n /proc/cygdrive)/*)
# We are in Cygwin using Windows php, so the path must be translated
dir=$(cygpath -m "$dir");
;;
esac
fi fi
"${dir}/generate-deps-for-config-factory" "$@" "${dir}/generate-deps-for-config-factory" "$@"
...@@ -2,9 +2,13 @@ ...@@ -2,9 +2,13 @@
dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../zendframework/zend-servicemanager/bin" && pwd) dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../zendframework/zend-servicemanager/bin" && pwd)
if [ -d /proc/cygdrive ] && [[ $(which php) == $(readlink -n /proc/cygdrive)/* ]]; then if [ -d /proc/cygdrive ]; then
# We are in Cgywin using Windows php, so the path must be translated case $(which php) in
dir=$(cygpath -m "$dir"); $(readlink -n /proc/cygdrive)/*)
# We are in Cygwin using Windows php, so the path must be translated
dir=$(cygpath -m "$dir");
;;
esac
fi fi
"${dir}/generate-factory-for-class" "$@" "${dir}/generate-factory-for-class" "$@"
...@@ -2,9 +2,13 @@ ...@@ -2,9 +2,13 @@
dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../zendframework/zend-view/bin" && pwd) dir=$(cd "${0%[/\\]*}" > /dev/null; cd "../zendframework/zend-view/bin" && pwd)
if [ -d /proc/cygdrive ] && [[ $(which php) == $(readlink -n /proc/cygdrive)/* ]]; then if [ -d /proc/cygdrive ]; then
# We are in Cgywin using Windows php, so the path must be translated case $(which php) in
dir=$(cygpath -m "$dir"); $(readlink -n /proc/cygdrive)/*)
# We are in Cygwin using Windows php, so the path must be translated
dir=$(cygpath -m "$dir");
;;
esac
fi fi
"${dir}/templatemap_generator.php" "$@" "${dir}/templatemap_generator.php" "$@"
...@@ -60,7 +60,7 @@ class ClassLoader ...@@ -60,7 +60,7 @@ class ClassLoader
public function getPrefixes() public function getPrefixes()
{ {
if (!empty($this->prefixesPsr0)) { if (!empty($this->prefixesPsr0)) {
return call_user_func_array('array_merge', $this->prefixesPsr0); return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
} }
return array(); return array();
...@@ -279,7 +279,7 @@ class ClassLoader ...@@ -279,7 +279,7 @@ class ClassLoader
*/ */
public function setApcuPrefix($apcuPrefix) public function setApcuPrefix($apcuPrefix)
{ {
$this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null; $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
} }
/** /**
...@@ -377,11 +377,11 @@ class ClassLoader ...@@ -377,11 +377,11 @@ class ClassLoader
$subPath = $class; $subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) { while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos); $subPath = substr($subPath, 0, $lastPos);
$search = $subPath.'\\'; $search = $subPath . '\\';
if (isset($this->prefixDirsPsr4[$search])) { if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) { foreach ($this->prefixDirsPsr4[$search] as $dir) {
$length = $this->prefixLengthsPsr4[$first][$search]; if (file_exists($file = $dir . $pathEnd)) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
return $file; return $file;
} }
} }
......
...@@ -6,4 +6,19 @@ $vendorDir = dirname(dirname(__FILE__)); ...@@ -6,4 +6,19 @@ $vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir); $baseDir = dirname($vendorDir);
return array( return array(
'ZfrPusherTest\\Client\\Listener\\SignatureListenerTest' => $vendorDir . '/zfr/zfr-pusher/tests/ZfrPusherTest/Client/Listener/SignatureListenerTest.php',
'ZfrPusherTest\\Client\\PusherClientTest' => $vendorDir . '/zfr/zfr-pusher/tests/ZfrPusherTest/Client/PusherClientTest.php',
'ZfrPusherTest\\Client\\PusherSignatureTest' => $vendorDir . '/zfr/zfr-pusher/tests/ZfrPusherTest/Client/PusherSignatureTest.php',
'ZfrPusherTest\\Service\\PusherServiceTest' => $vendorDir . '/zfr/zfr-pusher/tests/ZfrPusherTest/Service/PusherServiceTest.php',
'ZfrPusher\\Client\\Credentials' => $vendorDir . '/zfr/zfr-pusher/src/ZfrPusher/Client/Credentials.php',
'ZfrPusher\\Client\\Listener\\SignatureListener' => $vendorDir . '/zfr/zfr-pusher/src/ZfrPusher/Client/Listener/SignatureListener.php',
'ZfrPusher\\Client\\PusherClient' => $vendorDir . '/zfr/zfr-pusher/src/ZfrPusher/Client/PusherClient.php',
'ZfrPusher\\Client\\PusherSignature' => $vendorDir . '/zfr/zfr-pusher/src/ZfrPusher/Client/PusherSignature.php',
'ZfrPusher\\Exception\\ExceptionInterface' => $vendorDir . '/zfr/zfr-pusher/src/ZfrPusher/Exception/ExceptionInterface.php',
'ZfrPusher\\Service\\Exception\\ForbiddenException' => $vendorDir . '/zfr/zfr-pusher/src/ZfrPusher/Service/Exception/ForbiddenException.php',
'ZfrPusher\\Service\\Exception\\RuntimeException' => $vendorDir . '/zfr/zfr-pusher/src/ZfrPusher/Service/Exception/RuntimeException.php',
'ZfrPusher\\Service\\Exception\\UnauthorizedException' => $vendorDir . '/zfr/zfr-pusher/src/ZfrPusher/Service/Exception/UnauthorizedException.php',
'ZfrPusher\\Service\\Exception\\UnknownResourceException' => $vendorDir . '/zfr/zfr-pusher/src/ZfrPusher/Service/Exception/UnknownResourceException.php',
'ZfrPusher\\Service\\PusherService' => $vendorDir . '/zfr/zfr-pusher/src/ZfrPusher/Service/PusherService.php',
'ZfrPusher\\Version' => $vendorDir . '/zfr/zfr-pusher/src/ZfrPusher/Version.php',
); );
...@@ -7,4 +7,5 @@ $baseDir = dirname($vendorDir); ...@@ -7,4 +7,5 @@ $baseDir = dirname($vendorDir);
return array( return array(
'10a6847eba8a430a134fad89f4a30a26' => $vendorDir . '/zendframework/zend-cache/autoload/patternPluginManagerPolyfill.php', '10a6847eba8a430a134fad89f4a30a26' => $vendorDir . '/zendframework/zend-cache/autoload/patternPluginManagerPolyfill.php',
'3109cb1a231dcd04bee1f9f620d46975' => $vendorDir . '/paragonie/sodium_compat/autoload.php',
); );
...@@ -6,4 +6,8 @@ $vendorDir = dirname(dirname(__FILE__)); ...@@ -6,4 +6,8 @@ $vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir); $baseDir = dirname($vendorDir);
return array( return array(
'ZfrPusher\\' => array($vendorDir . '/zfr/zfr-pusher/src'),
'ZfrPusherTest\\' => array($vendorDir . '/zfr/zfr-pusher/tests'),
'Guzzle\\Tests' => array($vendorDir . '/guzzle/guzzle/tests'),
'Guzzle' => array($vendorDir . '/guzzle/guzzle/src'),
); );
...@@ -27,8 +27,11 @@ return array( ...@@ -27,8 +27,11 @@ return array(
'Zend\\ComponentInstaller\\' => array($vendorDir . '/zendframework/zend-component-installer/src'), 'Zend\\ComponentInstaller\\' => array($vendorDir . '/zendframework/zend-component-installer/src'),
'Zend\\Cache\\' => array($vendorDir . '/zendframework/zend-cache/src'), 'Zend\\Cache\\' => array($vendorDir . '/zendframework/zend-cache/src'),
'ZF\\DevelopmentMode\\' => array($vendorDir . '/zfcampus/zf-development-mode/src'), 'ZF\\DevelopmentMode\\' => array($vendorDir . '/zfcampus/zf-development-mode/src'),
'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'),
'RestApi\\' => array($vendorDir . '/multidots/zf3-rest-api/src'), 'RestApi\\' => array($vendorDir . '/multidots/zf3-rest-api/src'),
'Pusher\\' => array($vendorDir . '/pusher/pusher-php-server/src'),
'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'), 'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
'Khansia\\' => array($vendorDir . '/Khansia'), 'Khansia\\' => array($vendorDir . '/Khansia'),
......
...@@ -13,6 +13,9 @@ class ComposerAutoloaderInitfe7d3cb9e3e556360705ee29bb11bde9 ...@@ -13,6 +13,9 @@ class ComposerAutoloaderInitfe7d3cb9e3e556360705ee29bb11bde9
} }
} }
/**
* @return \Composer\Autoload\ClassLoader
*/
public static function getLoader() public static function getLoader()
{ {
if (null !== self::$loader) { if (null !== self::$loader) {
......
...@@ -8,6 +8,7 @@ class ComposerStaticInitfe7d3cb9e3e556360705ee29bb11bde9 ...@@ -8,6 +8,7 @@ class ComposerStaticInitfe7d3cb9e3e556360705ee29bb11bde9
{ {
public static $files = array ( public static $files = array (
'10a6847eba8a430a134fad89f4a30a26' => __DIR__ . '/..' . '/zendframework/zend-cache/autoload/patternPluginManagerPolyfill.php', '10a6847eba8a430a134fad89f4a30a26' => __DIR__ . '/..' . '/zendframework/zend-cache/autoload/patternPluginManagerPolyfill.php',
'3109cb1a231dcd04bee1f9f620d46975' => __DIR__ . '/..' . '/paragonie/sodium_compat/autoload.php',
); );
public static $prefixLengthsPsr4 = array ( public static $prefixLengthsPsr4 = array (
...@@ -35,13 +36,19 @@ class ComposerStaticInitfe7d3cb9e3e556360705ee29bb11bde9 ...@@ -35,13 +36,19 @@ class ComposerStaticInitfe7d3cb9e3e556360705ee29bb11bde9
'Zend\\Cache\\' => 11, 'Zend\\Cache\\' => 11,
'ZF\\DevelopmentMode\\' => 19, 'ZF\\DevelopmentMode\\' => 19,
), ),
'S' =>
array (
'Symfony\\Component\\EventDispatcher\\' => 34,
),
'R' => 'R' =>
array ( array (
'RestApi\\' => 8, 'RestApi\\' => 8,
), ),
'P' => 'P' =>
array ( array (
'Pusher\\' => 7,
'Psr\\SimpleCache\\' => 16, 'Psr\\SimpleCache\\' => 16,
'Psr\\Log\\' => 8,
'Psr\\Container\\' => 14, 'Psr\\Container\\' => 14,
'Psr\\Cache\\' => 10, 'Psr\\Cache\\' => 10,
), ),
...@@ -149,14 +156,26 @@ class ComposerStaticInitfe7d3cb9e3e556360705ee29bb11bde9 ...@@ -149,14 +156,26 @@ class ComposerStaticInitfe7d3cb9e3e556360705ee29bb11bde9
array ( array (
0 => __DIR__ . '/..' . '/zfcampus/zf-development-mode/src', 0 => __DIR__ . '/..' . '/zfcampus/zf-development-mode/src',
), ),
'Symfony\\Component\\EventDispatcher\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/event-dispatcher',
),
'RestApi\\' => 'RestApi\\' =>
array ( array (
0 => __DIR__ . '/..' . '/multidots/zf3-rest-api/src', 0 => __DIR__ . '/..' . '/multidots/zf3-rest-api/src',
), ),
'Pusher\\' =>
array (
0 => __DIR__ . '/..' . '/pusher/pusher-php-server/src',
),
'Psr\\SimpleCache\\' => 'Psr\\SimpleCache\\' =>
array ( array (
0 => __DIR__ . '/..' . '/psr/simple-cache/src', 0 => __DIR__ . '/..' . '/psr/simple-cache/src',
), ),
'Psr\\Log\\' =>
array (
0 => __DIR__ . '/..' . '/psr/log/Psr/Log',
),
'Psr\\Container\\' => 'Psr\\Container\\' =>
array ( array (
0 => __DIR__ . '/..' . '/psr/container/src', 0 => __DIR__ . '/..' . '/psr/container/src',
...@@ -187,11 +206,56 @@ class ComposerStaticInitfe7d3cb9e3e556360705ee29bb11bde9 ...@@ -187,11 +206,56 @@ class ComposerStaticInitfe7d3cb9e3e556360705ee29bb11bde9
), ),
); );
public static $prefixesPsr0 = array (
'Z' =>
array (
'ZfrPusher\\' =>
array (
0 => __DIR__ . '/..' . '/zfr/zfr-pusher/src',
),
'ZfrPusherTest\\' =>
array (
0 => __DIR__ . '/..' . '/zfr/zfr-pusher/tests',
),
),
'G' =>
array (
'Guzzle\\Tests' =>
array (
0 => __DIR__ . '/..' . '/guzzle/guzzle/tests',
),
'Guzzle' =>
array (
0 => __DIR__ . '/..' . '/guzzle/guzzle/src',
),
),
);
public static $classMap = array (
'ZfrPusherTest\\Client\\Listener\\SignatureListenerTest' => __DIR__ . '/..' . '/zfr/zfr-pusher/tests/ZfrPusherTest/Client/Listener/SignatureListenerTest.php',
'ZfrPusherTest\\Client\\PusherClientTest' => __DIR__ . '/..' . '/zfr/zfr-pusher/tests/ZfrPusherTest/Client/PusherClientTest.php',
'ZfrPusherTest\\Client\\PusherSignatureTest' => __DIR__ . '/..' . '/zfr/zfr-pusher/tests/ZfrPusherTest/Client/PusherSignatureTest.php',
'ZfrPusherTest\\Service\\PusherServiceTest' => __DIR__ . '/..' . '/zfr/zfr-pusher/tests/ZfrPusherTest/Service/PusherServiceTest.php',
'ZfrPusher\\Client\\Credentials' => __DIR__ . '/..' . '/zfr/zfr-pusher/src/ZfrPusher/Client/Credentials.php',
'ZfrPusher\\Client\\Listener\\SignatureListener' => __DIR__ . '/..' . '/zfr/zfr-pusher/src/ZfrPusher/Client/Listener/SignatureListener.php',
'ZfrPusher\\Client\\PusherClient' => __DIR__ . '/..' . '/zfr/zfr-pusher/src/ZfrPusher/Client/PusherClient.php',
'ZfrPusher\\Client\\PusherSignature' => __DIR__ . '/..' . '/zfr/zfr-pusher/src/ZfrPusher/Client/PusherSignature.php',
'ZfrPusher\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/zfr/zfr-pusher/src/ZfrPusher/Exception/ExceptionInterface.php',
'ZfrPusher\\Service\\Exception\\ForbiddenException' => __DIR__ . '/..' . '/zfr/zfr-pusher/src/ZfrPusher/Service/Exception/ForbiddenException.php',
'ZfrPusher\\Service\\Exception\\RuntimeException' => __DIR__ . '/..' . '/zfr/zfr-pusher/src/ZfrPusher/Service/Exception/RuntimeException.php',
'ZfrPusher\\Service\\Exception\\UnauthorizedException' => __DIR__ . '/..' . '/zfr/zfr-pusher/src/ZfrPusher/Service/Exception/UnauthorizedException.php',
'ZfrPusher\\Service\\Exception\\UnknownResourceException' => __DIR__ . '/..' . '/zfr/zfr-pusher/src/ZfrPusher/Service/Exception/UnknownResourceException.php',
'ZfrPusher\\Service\\PusherService' => __DIR__ . '/..' . '/zfr/zfr-pusher/src/ZfrPusher/Service/PusherService.php',
'ZfrPusher\\Version' => __DIR__ . '/..' . '/zfr/zfr-pusher/src/ZfrPusher/Version.php',
);
public static function getInitializer(ClassLoader $loader) public static function getInitializer(ClassLoader $loader)
{ {
return \Closure::bind(function () use ($loader) { return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInitfe7d3cb9e3e556360705ee29bb11bde9::$prefixLengthsPsr4; $loader->prefixLengthsPsr4 = ComposerStaticInitfe7d3cb9e3e556360705ee29bb11bde9::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitfe7d3cb9e3e556360705ee29bb11bde9::$prefixDirsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInitfe7d3cb9e3e556360705ee29bb11bde9::$prefixDirsPsr4;
$loader->prefixesPsr0 = ComposerStaticInitfe7d3cb9e3e556360705ee29bb11bde9::$prefixesPsr0;
$loader->classMap = ComposerStaticInitfe7d3cb9e3e556360705ee29bb11bde9::$classMap;
}, null, ClassLoader::class); }, null, ClassLoader::class);
} }
......
This diff is collapsed.
...@@ -2,6 +2,60 @@ ...@@ -2,6 +2,60 @@
All notable changes to this project will be documented in this file, in reverse chronological order by release. All notable changes to this project will be documented in this file, in reverse chronological order by release.
## 2.9.0 - 2019-08-29
### Added
- [#178](https://github.com/zendframework/zend-cache/pull/178) adds support for PHP 7.3.
### Changed
- [#186](https://github.com/zendframework/zend-cache/pull/186) replaces
deprecated `delete()` calls with `del()` in Redis adapter. `delete()`
function is deprecated since version 5.0.0 and `del()` is available
since version 2.1.0.
### Deprecated
- Nothing.
### Removed
- [#178](https://github.com/zendframework/zend-cache/pull/178) removes support for zend-stdlib v2 releases.
### Fixed
- Nothing.
## 2.8.3 - 2019-08-28
### Added
- Nothing.
### Changed
- Nothing.
### Deprecated
- Nothing.
### Removed
- Nothing.
### Fixed
- [#184](https://github.com/zendframework/zend-cache/pull/184) fixes
an issue with SimpleCacheDecorator where elements were deleted
after creation. Wrong TTL was set instead of using default value
from options.
- [#182](https://github.com/zendframework/zend-cache/pull/182) fixes
a typo in variable name within the `ExtMongoDbResourceManager::getResource`
method which prevented using custom db name when using that adapter.
## 2.8.2 - 2018-05-01 ## 2.8.2 - 2018-05-01
### Added ### Added
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
"psr/simple-cache": "^1.0", "psr/simple-cache": "^1.0",
"zendframework/zend-eventmanager": "^2.6.3 || ^3.2", "zendframework/zend-eventmanager": "^2.6.3 || ^3.2",
"zendframework/zend-servicemanager": "^2.7.8 || ^3.3", "zendframework/zend-servicemanager": "^2.7.8 || ^3.3",
"zendframework/zend-stdlib": "^2.7.7 || ^3.1" "zendframework/zend-stdlib": "^3.2.1"
}, },
"require-dev": { "require-dev": {
"cache/integration-tests": "^0.16", "cache/integration-tests": "^0.16",
...@@ -76,8 +76,8 @@ ...@@ -76,8 +76,8 @@
}, },
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "2.8.x-dev", "dev-master": "2.9.x-dev",
"dev-develop": "2.9.x-dev" "dev-develop": "2.10.x-dev"
}, },
"zf": { "zf": {
"component": "Zend\\Cache", "component": "Zend\\Cache",
......
...@@ -297,7 +297,7 @@ class CaptureCache extends AbstractPattern ...@@ -297,7 +297,7 @@ class CaptureCache extends AbstractPattern
ErrorHandler::start(); ErrorHandler::start();
if ($perm === false) { if ($perm === false) {
// build-in mkdir function is enough // built-in mkdir function is enough
$umask = ($umask !== false) ? umask($umask) : false; $umask = ($umask !== false) ? umask($umask) : false;
$res = mkdir($pathname, ($perm !== false) ? $perm : 0775, true); $res = mkdir($pathname, ($perm !== false) ? $perm : 0775, true);
...@@ -318,7 +318,7 @@ class CaptureCache extends AbstractPattern ...@@ -318,7 +318,7 @@ class CaptureCache extends AbstractPattern
throw new Exception\RuntimeException("chmod('{$pathname}', 0{$oct}) failed", 0, $err); throw new Exception\RuntimeException("chmod('{$pathname}', 0{$oct}) failed", 0, $err);
} }
} else { } else {
// build-in mkdir function sets permission together with current umask // built-in mkdir function sets permission together with current umask
// which doesn't work well on multo threaded webservers // which doesn't work well on multo threaded webservers
// -> create directories one by one and set permissions // -> create directories one by one and set permissions
......
...@@ -152,7 +152,7 @@ class PatternOptions extends AbstractOptions ...@@ -152,7 +152,7 @@ class PatternOptions extends AbstractOptions
public function __construct($options = null) public function __construct($options = null)
{ {
// disable file/directory permissions by default on windows systems // disable file/directory permissions by default on windows systems
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') { if (stripos(PHP_OS, 'WIN') === 0) {
$this->filePermission = false; $this->filePermission = false;
$this->dirPermission = false; $this->dirPermission = false;
} }
...@@ -446,7 +446,7 @@ class PatternOptions extends AbstractOptions ...@@ -446,7 +446,7 @@ class PatternOptions extends AbstractOptions
); );
} elseif ($filePermission & 0111) { } elseif ($filePermission & 0111) {
throw new Exception\InvalidArgumentException( throw new Exception\InvalidArgumentException(
"Invalid file permission: Files shoudn't be executable" "Invalid file permission: Files shouldn't be executable"
); );
} }
} }
......
...@@ -104,7 +104,7 @@ class CacheItemPoolDecorator implements CacheItemPoolInterface ...@@ -104,7 +104,7 @@ class CacheItemPoolDecorator implements CacheItemPoolInterface
$keys = array_diff($keys, array_keys($items)); $keys = array_diff($keys, array_keys($items));
if (count($keys)) { if ($keys) {
try { try {
$cacheItems = $this->storage->getItems($keys); $cacheItems = $this->storage->getItems($keys);
} catch (Exception\InvalidArgumentException $e) { } catch (Exception\InvalidArgumentException $e) {
......
<?php <?php
/** /**
* @see https://github.com/zendframework/zend-cache for the canonical source repository * @see https://github.com/zendframework/zend-cache for the canonical source repository
* @copyright Copyright (c) 2018 Zend Technologies USA Inc. (https://www.zend.com) * @copyright Copyright (c) 2018-2019 Zend Technologies USA Inc. (https://www.zend.com)
* @license https://github.com/zendframework/zend-cache/blob/master/LICENSE.md New BSD License * @license https://github.com/zendframework/zend-cache/blob/master/LICENSE.md New BSD License
*/ */
...@@ -113,7 +113,10 @@ class SimpleCacheDecorator implements SimpleCacheInterface ...@@ -113,7 +113,10 @@ class SimpleCacheDecorator implements SimpleCacheInterface
$options = $this->storage->getOptions(); $options = $this->storage->getOptions();
$previousTtl = $options->getTtl(); $previousTtl = $options->getTtl();
$options->setTtl($ttl);
if ($ttl !== null) {
$options->setTtl($ttl);
}
try { try {
$result = $this->storage->setItem($key, $value); $result = $this->storage->setItem($key, $value);
...@@ -213,7 +216,10 @@ class SimpleCacheDecorator implements SimpleCacheInterface ...@@ -213,7 +216,10 @@ class SimpleCacheDecorator implements SimpleCacheInterface
$options = $this->storage->getOptions(); $options = $this->storage->getOptions();
$previousTtl = $options->getTtl(); $previousTtl = $options->getTtl();
$options->setTtl($ttl);
if ($ttl !== null) {
$options->setTtl($ttl);
}
try { try {
$result = $this->storage->setItems($values); $result = $this->storage->setItems($values);
......
...@@ -220,7 +220,6 @@ class Dba extends AbstractAdapter implements ...@@ -220,7 +220,6 @@ class Dba extends AbstractAdapter implements
} }
$prefix = $namespace . $this->getOptions()->getNamespaceSeparator(); $prefix = $namespace . $this->getOptions()->getNamespaceSeparator();
$prefixl = strlen($prefix);
$result = true; $result = true;
$this->_open(); $this->_open();
...@@ -230,7 +229,7 @@ class Dba extends AbstractAdapter implements ...@@ -230,7 +229,7 @@ class Dba extends AbstractAdapter implements
$recheck = false; $recheck = false;
$internalKey = dba_firstkey($this->handle); $internalKey = dba_firstkey($this->handle);
while ($internalKey !== false && $internalKey !== null) { while ($internalKey !== false && $internalKey !== null) {
if (substr($internalKey, 0, $prefixl) === $prefix) { if (strpos($internalKey, $prefix) === 0) {
$result = dba_delete($internalKey, $this->handle) && $result; $result = dba_delete($internalKey, $this->handle) && $result;
} }
...@@ -259,7 +258,6 @@ class Dba extends AbstractAdapter implements ...@@ -259,7 +258,6 @@ class Dba extends AbstractAdapter implements
$options = $this->getOptions(); $options = $this->getOptions();
$namespace = $options->getNamespace(); $namespace = $options->getNamespace();
$prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator() . $prefix; $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator() . $prefix;
$prefixL = strlen($prefix);
$result = true; $result = true;
$this->_open(); $this->_open();
...@@ -269,7 +267,7 @@ class Dba extends AbstractAdapter implements ...@@ -269,7 +267,7 @@ class Dba extends AbstractAdapter implements
$recheck = false; $recheck = false;
$internalKey = dba_firstkey($this->handle); $internalKey = dba_firstkey($this->handle);
while ($internalKey !== false && $internalKey !== null) { while ($internalKey !== false && $internalKey !== null) {
if (substr($internalKey, 0, $prefixL) === $prefix) { if (strpos($internalKey, $prefix) === 0) {
$result = dba_delete($internalKey, $this->handle) && $result; $result = dba_delete($internalKey, $this->handle) && $result;
$recheck = true; $recheck = true;
} }
......
<?php <?php
/** /**
* @see https://github.com/zendframework/zend-cache for the canonical source repository * @see https://github.com/zendframework/zend-cache for the canonical source repository
* @copyright Copyright (c) 2018 Zend Technologies USA Inc. (https://www.zend.com) * @copyright Copyright (c) 2018-2019 Zend Technologies USA Inc. (https://www.zend.com)
* @license https://github.com/zendframework/zend-cache/blob/master/LICENSE.md New BSD License * @license https://github.com/zendframework/zend-cache/blob/master/LICENSE.md New BSD License
*/ */
...@@ -98,7 +98,7 @@ class ExtMongoDbResourceManager ...@@ -98,7 +98,7 @@ class ExtMongoDbResourceManager
} }
$collection = $resource['client_instance']->selectCollection( $collection = $resource['client_instance']->selectCollection(
isset($resouce['db']) ? $resource['db'] : 'zend', isset($resource['db']) ? $resource['db'] : 'zend',
isset($resource['collection']) ? $resource['collection'] : 'cache' isset($resource['collection']) ? $resource['collection'] : 'cache'
); );
$collection->createIndex(['key' => 1]); $collection->createIndex(['key' => 1]);
......
...@@ -1451,7 +1451,7 @@ class Filesystem extends AbstractAdapter implements ...@@ -1451,7 +1451,7 @@ class Filesystem extends AbstractAdapter implements
ErrorHandler::start(); ErrorHandler::start();
if ($perm === false || $level == 1) { if ($perm === false || $level == 1) {
// build-in mkdir function is enough // built-in mkdir function is enough
$umask = ($umask !== false) ? umask($umask) : false; $umask = ($umask !== false) ? umask($umask) : false;
$res = mkdir($pathname, ($perm !== false) ? $perm : 0775, true); $res = mkdir($pathname, ($perm !== false) ? $perm : 0775, true);
...@@ -1480,7 +1480,7 @@ class Filesystem extends AbstractAdapter implements ...@@ -1480,7 +1480,7 @@ class Filesystem extends AbstractAdapter implements
throw new Exception\RuntimeException("chmod('{$pathname}', 0{$oct}) failed", 0, $err); throw new Exception\RuntimeException("chmod('{$pathname}', 0{$oct}) failed", 0, $err);
} }
} else { } else {
// build-in mkdir function sets permission together with current umask // built-in mkdir function sets permission together with current umask
// which doesn't work well on multo threaded webservers // which doesn't work well on multo threaded webservers
// -> create directories one by one and set permissions // -> create directories one by one and set permissions
......
...@@ -119,7 +119,7 @@ class FilesystemOptions extends AdapterOptions ...@@ -119,7 +119,7 @@ class FilesystemOptions extends AdapterOptions
public function __construct($options = null) public function __construct($options = null)
{ {
// disable file/directory permissions by default on windows systems // disable file/directory permissions by default on windows systems
if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') { if (stripos(PHP_OS, 'WIN') === 0) {
$this->filePermission = false; $this->filePermission = false;
$this->dirPermission = false; $this->dirPermission = false;
} }
...@@ -322,7 +322,7 @@ class FilesystemOptions extends AdapterOptions ...@@ -322,7 +322,7 @@ class FilesystemOptions extends AdapterOptions
); );
} elseif ($filePermission & 0111) { } elseif ($filePermission & 0111) {
throw new Exception\InvalidArgumentException( throw new Exception\InvalidArgumentException(
"Invalid file permission: Cache files shoudn't be executable" "Invalid file permission: Cache files shouldn't be executable"
); );
} }
} }
......
...@@ -332,7 +332,7 @@ class MemcachedResourceManager ...@@ -332,7 +332,7 @@ class MemcachedResourceManager
$reflection = new ReflectionClass('Memcached'); $reflection = new ReflectionClass('Memcached');
$constants = $reflection->getConstants(); $constants = $reflection->getConstants();
foreach ($constants as $constName => $constValue) { foreach ($constants as $constName => $constValue) {
if (substr($constName, 0, 4) == 'OPT_') { if (strpos($constName, 'OPT_') === 0) {
$libOptions[$constValue] = $resource->getOption($constValue); $libOptions[$constValue] = $resource->getOption($constValue);
} }
} }
......
...@@ -203,10 +203,9 @@ class Memory extends AbstractAdapter implements ...@@ -203,10 +203,9 @@ class Memory extends AbstractAdapter implements
return true; return true;
} }
$prefixL = strlen($prefix);
$data = & $this->data[$ns]; $data = & $this->data[$ns];
foreach ($data as $key => & $item) { foreach ($data as $key => & $item) {
if (substr($key, 0, $prefixL) === $prefix) { if (strpos($key, $prefix) === 0) {
unset($data[$key]); unset($data[$key]);
} }
} }
......
...@@ -356,7 +356,7 @@ class Redis extends AbstractAdapter implements ...@@ -356,7 +356,7 @@ class Redis extends AbstractAdapter implements
{ {
$redis = $this->getRedisResource(); $redis = $this->getRedisResource();
try { try {
return (bool) $redis->delete($this->namespacePrefix . $normalizedKey); return (bool) $redis->del($this->namespacePrefix . $normalizedKey);
} catch (RedisResourceException $e) { } catch (RedisResourceException $e) {
throw new Exception\RuntimeException($redis->getLastError(), $e->getCode(), $e); throw new Exception\RuntimeException($redis->getLastError(), $e->getCode(), $e);
} }
...@@ -434,7 +434,7 @@ class Redis extends AbstractAdapter implements ...@@ -434,7 +434,7 @@ class Redis extends AbstractAdapter implements
$options = $this->getOptions(); $options = $this->getOptions();
$prefix = $namespace . $options->getNamespaceSeparator(); $prefix = $namespace . $options->getNamespaceSeparator();
$redis->delete($redis->keys($prefix . '*')); $redis->del($redis->keys($prefix . '*'));
return true; return true;
} }
...@@ -460,7 +460,7 @@ class Redis extends AbstractAdapter implements ...@@ -460,7 +460,7 @@ class Redis extends AbstractAdapter implements
$namespace = $options->getNamespace(); $namespace = $options->getNamespace();
$prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator() . $prefix; $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator() . $prefix;
$redis->delete($redis->keys($prefix.'*')); $redis->del($redis->keys($prefix.'*'));
return true; return true;
} }
......
...@@ -299,7 +299,7 @@ class RedisResourceManager ...@@ -299,7 +299,7 @@ class RedisResourceManager
} }
if (! $success) { if (! $success) {
throw new Exception\RuntimeException('Could not estabilish connection with Redis instance'); throw new Exception\RuntimeException('Could not establish connection with Redis instance');
} }
$resource['initialized'] = true; $resource['initialized'] = true;
...@@ -492,7 +492,7 @@ class RedisResourceManager ...@@ -492,7 +492,7 @@ class RedisResourceManager
$reflection = new ReflectionClass('Redis'); $reflection = new ReflectionClass('Redis');
$constants = $reflection->getConstants(); $constants = $reflection->getConstants();
foreach ($constants as $constName => $constValue) { foreach ($constants as $constName => $constValue) {
if (substr($constName, 0, 4) == 'OPT_') { if (strpos($constName, 'OPT_') === 0) {
$libOptions[$constValue] = $resource['resource']->getOption($constValue); $libOptions[$constValue] = $resource['resource']->getOption($constValue);
} }
} }
......
...@@ -123,9 +123,8 @@ class Session extends AbstractAdapter implements ...@@ -123,9 +123,8 @@ class Session extends AbstractAdapter implements
} }
$data = $cntr->offsetGet($ns); $data = $cntr->offsetGet($ns);
$prefixL = strlen($prefix);
foreach ($data as $key => & $item) { foreach ($data as $key => & $item) {
if (substr($key, 0, $prefixL) === $prefix) { if (strpos($key, $prefix) === 0) {
unset($data[$key]); unset($data[$key]);
} }
} }
......
...@@ -122,7 +122,7 @@ class Capabilities ...@@ -122,7 +122,7 @@ class Capabilities
protected $supportedDatatypes; protected $supportedDatatypes;
/** /**
* Supported metdata * Supported metadata
* *
* If it's NULL the capability isn't set and the getter * If it's NULL the capability isn't set and the getter
* returns the base capability or the default value. * returns the base capability or the default value.
......
...@@ -2,6 +2,33 @@ ...@@ -2,6 +2,33 @@
All notable changes to this project will be documented in this file, in reverse chronological order by release. All notable changes to this project will be documented in this file, in reverse chronological order by release.
## 3.3.0 - 2019-06-08
### Added
- [#54](https://github.com/zendframework/zend-config/pull/54) adds support for PHP 7.3.
- [#58](https://github.com/zendframework/zend-config/pull/58) adds
`$processSections` to INI reader, allowing control over whether sections
should be parsed or not
- [#63](https://github.com/zendframework/zend-config/pull/63) adds .yml to
Zend\Config\Factory as an alternative extension for yaml
### Changed
- Nothing.
### Deprecated
- Nothing.
### Removed
- Nothing.
### Fixed
- Nothing.
## 3.2.0 - 2018-04-24 ## 3.2.0 - 2018-04-24
### Added ### Added
......
...@@ -52,8 +52,8 @@ ...@@ -52,8 +52,8 @@
}, },
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.2.x-dev", "dev-master": "3.3.x-dev",
"dev-develop": "3.3.x-dev" "dev-develop": "3.4.x-dev"
} }
}, },
"scripts": { "scripts": {
......
...@@ -192,6 +192,6 @@ class AbstractConfigFactory implements AbstractFactoryInterface ...@@ -192,6 +192,6 @@ class AbstractConfigFactory implements AbstractFactoryInterface
return $matches[1]; return $matches[1];
} }
} }
return; return null;
} }
} }
...@@ -37,6 +37,7 @@ class Factory ...@@ -37,6 +37,7 @@ class Factory
'json' => 'json', 'json' => 'json',
'xml' => 'xml', 'xml' => 'xml',
'yaml' => 'yaml', 'yaml' => 'yaml',
'yml' => 'yaml',
'properties' => 'javaproperties', 'properties' => 'javaproperties',
]; ];
...@@ -52,6 +53,7 @@ class Factory ...@@ -52,6 +53,7 @@ class Factory
'json' => 'json', 'json' => 'json',
'xml' => 'xml', 'xml' => 'xml',
'yaml' => 'yaml', 'yaml' => 'yaml',
'yml' => 'yaml',
]; ];
/** /**
......
...@@ -116,7 +116,7 @@ class Constant extends Token implements ProcessorInterface ...@@ -116,7 +116,7 @@ class Constant extends Token implements ProcessorInterface
return parent::doProcess($value, $replacements); return parent::doProcess($value, $replacements);
} }
$class = substr($value, 0, strlen($value) - 7); $class = substr($value, 0, -7);
if (class_exists($class)) { if (class_exists($class)) {
return $class; return $class;
} }
......
<?php <?php
/** /**
* @see https://github.com/zendframework/zend-config for the canonical source repository * @see https://github.com/zendframework/zend-config for the canonical source repository
* @copyright Copyright (c) 2005-2017 Zend Technologies USA Inc. (http://www.zend.com) * @copyright Copyright (c) 2005-2019 Zend Technologies USA Inc. (http://www.zend.com)
* @license https://github.com/zendframework/zend-config/blob/master/LICENSE.md New BSD License * @license https://github.com/zendframework/zend-config/blob/master/LICENSE.md New BSD License
*/ */
...@@ -28,6 +28,14 @@ class Ini implements ReaderInterface ...@@ -28,6 +28,14 @@ class Ini implements ReaderInterface
*/ */
protected $directory; protected $directory;
/**
* Flag which determines whether sections are processed or not.
*
* @see https://www.php.net/parse_ini_file
* @var bool
*/
protected $processSections = true;
/** /**
* Set nest separator. * Set nest separator.
* *
...@@ -50,6 +58,34 @@ class Ini implements ReaderInterface ...@@ -50,6 +58,34 @@ class Ini implements ReaderInterface
return $this->nestSeparator; return $this->nestSeparator;
} }
/**
* Marks whether sections should be processed.
* When sections are not processed,section names are stripped and section
* values are merged
*
* @see https://www.php.net/parse_ini_file
* @param bool $processSections
* @return $this
*/
public function setProcessSections($processSections)
{
$this->processSections = (bool) $processSections;
return $this;
}
/**
* Get if sections should be processed
* When sections are not processed,section names are stripped and section
* values are merged
*
* @see https://www.php.net/parse_ini_file
* @return bool
*/
public function getProcessSections()
{
return $this->processSections;
}
/** /**
* fromFile(): defined by Reader interface. * fromFile(): defined by Reader interface.
* *
...@@ -78,7 +114,7 @@ class Ini implements ReaderInterface ...@@ -78,7 +114,7 @@ class Ini implements ReaderInterface
}, },
E_WARNING E_WARNING
); );
$ini = parse_ini_file($filename, true); $ini = parse_ini_file($filename, $this->getProcessSections());
restore_error_handler(); restore_error_handler();
return $this->process($ini); return $this->process($ini);
...@@ -107,7 +143,7 @@ class Ini implements ReaderInterface ...@@ -107,7 +143,7 @@ class Ini implements ReaderInterface
}, },
E_WARNING E_WARNING
); );
$ini = parse_ini_string($string, true); $ini = parse_ini_string($string, $this->getProcessSections());
restore_error_handler(); restore_error_handler();
return $this->process($ini); return $this->process($ini);
...@@ -148,7 +184,7 @@ class Ini implements ReaderInterface ...@@ -148,7 +184,7 @@ class Ini implements ReaderInterface
*/ */
private function buildNestedSection($sections, $value) private function buildNestedSection($sections, $value)
{ {
if (count($sections) == 0) { if (! $sections) {
return $this->processSection($value); return $this->processSection($value);
} }
...@@ -191,9 +227,11 @@ class Ini implements ReaderInterface ...@@ -191,9 +227,11 @@ class Ini implements ReaderInterface
if (strpos($key, $this->nestSeparator) !== false) { if (strpos($key, $this->nestSeparator) !== false) {
$pieces = explode($this->nestSeparator, $key, 2); $pieces = explode($this->nestSeparator, $key, 2);
if (! strlen($pieces[0]) || ! strlen($pieces[1])) { if ($pieces[0] === '' || $pieces[1] === '') {
throw new Exception\RuntimeException(sprintf('Invalid key "%s"', $key)); throw new Exception\RuntimeException(sprintf('Invalid key "%s"', $key));
} elseif (! isset($config[$pieces[0]])) { }
if (! isset($config[$pieces[0]])) {
if ($pieces[0] === '0' && ! empty($config)) { if ($pieces[0] === '0' && ! empty($config)) {
$config = [$pieces[0] => $config]; $config = [$pieces[0] => $config];
} else { } else {
......
...@@ -138,7 +138,7 @@ class JavaProperties implements ReaderInterface ...@@ -138,7 +138,7 @@ class JavaProperties implements ReaderInterface
$delimLength = strlen($delimiter); $delimLength = strlen($delimiter);
$result = []; $result = [];
$lines = explode("\n", $string); $lines = explode("\n", $string);
$key = ""; $key = '';
$isWaitingOtherLine = false; $isWaitingOtherLine = false;
foreach ($lines as $i => $line) { foreach ($lines as $i => $line) {
// Ignore empty lines and commented lines // Ignore empty lines and commented lines
...@@ -159,7 +159,7 @@ class JavaProperties implements ReaderInterface ...@@ -159,7 +159,7 @@ class JavaProperties implements ReaderInterface
// Check if ends with single '\' (indicating another line is expected) // Check if ends with single '\' (indicating another line is expected)
if (strrpos($value, "\\") === strlen($value) - strlen("\\")) { if (strrpos($value, "\\") === strlen($value) - strlen("\\")) {
$value = substr($value, 0, strlen($value) - 1); $value = substr($value, 0, -1);
$isWaitingOtherLine = true; $isWaitingOtherLine = true;
} else { } else {
$isWaitingOtherLine = false; $isWaitingOtherLine = false;
......
...@@ -143,13 +143,17 @@ class Ini extends AbstractWriter ...@@ -143,13 +143,17 @@ class Ini extends AbstractWriter
{ {
if (is_int($value) || is_float($value)) { if (is_int($value) || is_float($value)) {
return $value; return $value;
} elseif (is_bool($value)) { }
if (is_bool($value)) {
return ($value ? 'true' : 'false'); return ($value ? 'true' : 'false');
} elseif (false === strpos($value, '"')) { }
if (false === strpos($value, '"')) {
return '"' . $value . '"'; return '"' . $value . '"';
} else {
throw new Exception\RuntimeException('Value can not contain double quotes');
} }
throw new Exception\RuntimeException('Value can not contain double quotes');
} }
/** /**
......
...@@ -2,7 +2,107 @@ ...@@ -2,7 +2,107 @@
All notable changes to this project will be documented in this file, in reverse chronological order by release. All notable changes to this project will be documented in this file, in reverse chronological order by release.
## 2.9.3 - TBD ## 2.11.0 - 2019-12-31
### Added
- [#336](https://github.com/zendframework/zend-db/pull/336) adds `InsertIgnore` class for "INSERT IGNORE" usage (usable in `MySQL` platform).
- [#356](https://github.com/zendframework/zend-db/pull/356) adds support for `IN (NULL)` for empty value-set.
### Changed
- Nothing.
### Deprecated
- Nothing.
### Removed
- Nothing.
### Fixed
- [#146](https://github.com/zendframework/zend-db/pull/146) fixes setting correct value for `lastInsertValue` pre-insert in `SequenceFeature`.
## 2.10.1 - 2019-12-31
- Nothing.
### Changed
- Nothing.
### Deprecated
- Nothing.
### Removed
- Nothing.
### Fixed
- [#382](https://github.com/zendframework/zend-db/pull/382) fixes `Zend\Db\Sql\Expression` to allow `0` value for parameter.
- [#395](https://github.com/zendframework/zend-db/pull/395) fixes PHP 7.4 compatibility.
- [#392](https://github.com/zendframework/zend-db/pull/392) fixes `MetadataFeature` to work with `TableIdentifier`.
- [#399](https://github.com/zendframework/zend-db/pull/399) fixes accessing constraint metadata within the Oracle adapter.
- [#375](https://github.com/zendframework/zend-db/pull/375) fixes detecting number of replacements in `Zend\Db\Sql\Expression`.
- [#377](https://github.com/zendframework/zend-db/pull/377) allows any `AdapterInterface` instance in `RowGateway`.
- [#342](https://github.com/zendframework/zend-db/pull/342) fixes deleting from aliased tables.
- [#386](https://github.com/zendframework/zend-db/pull/386) fixes too strongly casting integer parameters in PDO adapter.
## 2.10.0 - 2019-02-25
### Added
- [#157](https://github.com/zendframework/zend-db/pull/157) added support of
`Zend\Db\Sql\TableIdentifier` in DDL
- [#345](https://github.com/zendframework/zend-db/pull/345) allow usage with
zend-hydrator v3
- [#346](https://github.com/zendframework/zend-db/pull/346) adds support for PHP
7.3
### Changed
- Nothing.
### Deprecated
- Nothing.
### Removed
- Nothing.
### Fixed
- [#303](https://github.com/zendframework/zend-db/pull/303) fixes #295 issue:
handle empty array as datasource at `AbstractResultSet::initialize()` at PHP
7.2
- [#313](https://github.com/zendframework/zend-db/pull/313) test
`AbstractResultSet::current()` to return null on empty array
- [#329](https://github.com/zendframework/zend-db/pull/329) fixes Exception
thrown when calling `prepareStatementForSqlObject` on a Select with a
sub-Select that has limit and/or offset set
- [#337](https://github.com/zendframework/zend-db/pull/337) fixes #330 current
NULL for mysqli
- [#338](https://github.com/zendframework/zend-db/pull/338) restore missing use
`ResultSet` in `AbstractTableGateway`
- [#341](https://github.com/zendframework/zend-db/pull/341) fixes undefined
variable bug in MetadataFeature
- [#357](https://github.com/zendframework/zend-db/pull/357) fixes named params
in subquery - limit and offset (issue #355)
## 2.9.3 - 2018-04-09
### Added ### Added
...@@ -22,7 +122,19 @@ All notable changes to this project will be documented in this file, in reverse ...@@ -22,7 +122,19 @@ All notable changes to this project will be documented in this file, in reverse
### Fixed ### Fixed
- [#295](https://github.com/zendframework/zend-db/pull/295) fix error when datasource passed to `AbstractResultSet::initialize()` is empty array at php 7.2 environment. - [#295](https://github.com/zendframework/zend-db/pull/295) fix error when
datasource passed to `AbstractResultSet::initialize()` is empty array at
php 7.2 environment
- [#300](https://github.com/zendframework/zend-db/pull/300) Fix error for nested
queries inside field parameters
- [#301](https://github.com/zendframework/zend-db/pull/301) fix for issue with
set fields that exists in different tables in one query
- [#304](https://github.com/zendframework/zend-db/pull/304) fix PDO bind
parameter name to use field name with extended charset (PDO only supports
alphanumeric and underscore for placeholder/parameter names).
## 2.9.2 - 2017-12-11 ## 2.9.2 - 2017-12-11
......
Copyright (c) 2005-2017, Zend Technologies USA, Inc. Copyright (c) 2005-2019, Zend Technologies USA, Inc.
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, Redistribution and use in source and binary forms, with or without modification,
......
This diff is collapsed.
<?xml version="1.0"?>
<ruleset name="Zend Framework coding standard">
<rule ref="./vendor/zendframework/zend-coding-standard/ruleset.xml" />
<rule ref="PSR1.Files.SideEffects">
<exclude-pattern>*/test/unit/Adapter/Driver/IbmDb2/StatementTest.php</exclude-pattern>
</rule>
<!-- Paths to check -->
<file>src</file>
<file>test</file>
</ruleset>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment