2016-07-04 62 views
1

我正在開發一個簡單的內部使用cms。通過此cms,用戶可以創建和編輯某個產品的頁面。我想提醒用戶,嘗試編輯已被其他用戶打開的特定產品頁面。當它已經打開時鎖定頁面

我正在使用以下腳本,但我不知道如何輕鬆提醒第二個用戶,例如「ehi,此頁面正在被其他用戶編輯」,點擊「確定」按鈕並將其重定向到主頁。

我跟蹤所有信息正確,只是我不知道如何警告第二個用戶和他的鎖定頁面。

提前致謝!

產品的頁面

<script src="pages/includes/jsHandler.js"></script> 
    <script> 
    window.onload = function(){ return start('<?php echo basename($_SERVER['REQUEST_URI'], '?' . $_SERVER['PATH_INFO']); ?>');}; 
    window.onbeforeunload = function(){ return end(); }; 
    window.onclose = function(){ return end(); }; 
</script> 

jsHandler.js

function start(pageName) { 
    var xmlhttp3; 
    if (window.XMLHttpRequest) { 
     xmlhttp3 = new XMLHttpRequest(); 
     } else { 
     xmlhttp3 = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
     xmlhttp3.onreadystatechange=function() { 
     if (xmlhttp3.readyState==4 && xmlhttp3.status==200) { 
     } 
     } 
     xmlhttp3.open("GET","pages/includes/trackStart.php?pageName="+pageName,true); 
     xmlhttp3.send(); 
    } 

    function end() { 
     var xmlhttp3; 
     if (window.XMLHttpRequest) { 
     xmlhttp3 = new XMLHttpRequest(); 
     } else { 
     xmlhttp3 = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
     xmlhttp3.onreadystatechange=function() { 
     if (xmlhttp3.readyState==4 && xmlhttp3.status==200) { 
     } 
     } 
     xmlhttp3.open("GET","pages/includes/trackEnd.php",true); 
     xmlhttp3.send(); 
    } 

trackStart.php

<?php session_start(); 
date_default_timezone_set("Europe/Rome"); 
require("dbHandler.php"); 
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; 
$_SESSION['startTime'] = $_SERVER['REQUEST_TIME']; 
$_SESSION['pageName'] = $_GET['pageName']; 

if(isset($_SESSION['pageViews'])) 
{ 
    $_SESSION['pageViews'] = $_SESSION['pageViews'] + 1; 
} 
else 
{ 
    $_SESSION['pageViews'] = 0; 
} 

$ip = $_SESSION['ip']; 
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}/json")); 
$user_location = $details->city . " , " . $details->country; 

saveData($_SESSION['ip'],$_SESSION['startTime'],'0',$_SESSION['pageName'],$_SESSION['pageViews'],'0','start',$user_location); 
?> 

trackEnd.php

<?php session_start(); 
date_default_timezone_set("Europe/Rome"); 
require("dbHandler.php"); 
$_SESSION['endTime'] = $_SERVER['REQUEST_TIME']; 
$timeSpent = $_SESSION['endTime'] - $_SESSION['startTime']; 
$timeSpent = $timeSpent . " seconds"; 

saveData($_SESSION['ip'],$_SESSION['startTime'],$_SESSION['endTime'],$_SESSION['pageName'],$_SESSION['pageViews'],$timeSpent,'end'); 
?> 

dbHandler.php

<?php 
function saveData($ip,$startTime,$endTime,$pageName,$viewCount,$timeSpent,$action,$location) 
{ 
    $mysqli = new mysqli("localhost", "blabla", "blabla", "blabla"); 

    if($action == 'start') 
    { 

     $q = "INSERT INTO track_user(ip_address,start_time,end_time,page_name,view_count,time_spent,user_location) VALUES('$ip','$startTime','$endTime','$pageName','$viewCount','$timeSpent','$location')"; 
    $mysqli->query($q); 

    } 
    else 
    { 
     $q = "UPDATE track_user SET end_time = '$endTime', time_spent = '$timeSpent' WHERE ip_address = '$ip' AND start_time = '$startTime' AND page_name = '$pageName'"; 
    $mysqli->query($q); 
    } 
} 
?> 
+0

難道你不只是想阻止他們在第一個地方打開這個頁面,如果它已經被編輯了?否則,您不清楚具體問題是什麼 – charlietfl

+0

例如,當您嘗試編輯其他用戶在該特定時刻正在編輯的帖子時,Wordpress會提示您。只是提醒第二位用戶該頁面已被另一個人打開。通過這種方式,頁面不能同時由2個或更多人編輯,但第一個用戶必須保存他的修改以允許第二個用戶編輯該頁面:) – Otto

+0

所以如果它只是爲了視覺創建一個半透明覆蓋幷包含在頁面中,如果符合'editMode'條件 – charlietfl

回答

0

解決了!我做了一個php api,選擇當前的pageName。如果頁面名稱是平等的,END_TIME = 0,意味着頁面已被打開,我設置$ risultato = 1。在我的HTML,我用這個代碼,以提醒用戶(自舉模式):

<script> 
    $('body').append('<div class="modal fade" id="session-locked" tabindex="-1" role="dialog" aria-hidden="true">'+ 
        '<div class="modal-dialog">'+ 
         '<div class="modal-content">'+ 
          '<div class="modal-header bg-primary">'+ 
           '<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="icons-office-52"></i></button>'+ 
           '<h4 class="modal-title">Scheda occupata</h4>'+ 
          '</div>'+ 
          '<div class="modal-body">'+ 
           '<p><br />La scheda è occupata da un altro utente.<br />Clicca OK per tornare in Homepage</p>'+ 
          '</div>'+ 
          '<div class="modal-footer">'+ 
           '<button id="idle-locked-dialog-keepalive" type="button" class="btn btn-primary btn-embossed" data-dismiss="modal">OK</button>'+ 
          '</div>'+ 
         '</div>'+ 
        '</div>'+ 
        '</div>'); 
    var page = '<?php echo basename($_SERVER['REQUEST_URI'], '?' . $_SERVER['PATH_INFO']); ?>'; 
    var time = '<?php echo ($_SERVER['REQUEST_TIME']); ?>'; 
     var jqxhr = $.ajax({url: api_ricerca_lock, type: "GET",dataType: "json", data: {pageName: page, startTime: time}}) 
     .done(function(json) { 
     if (json.risultato == 1) { 
      $('#session-locked').modal('show'); 
      $('#idle-locked-dialog-keepalive').on('click', function() { 
       $('#session-locked').modal('hide'); 
       window.location = "main.php"; 
      }); 
     } 
     else { 
      window.onload = function(){ return start('<?php echo basename($_SERVER['REQUEST_URI'], '?' . $_SERVER['PATH_INFO']); ?>');}; 
      window.onbeforeunload = function(){ return end(); }; 
      window.onclose = function(){ return end(); }; 
     } 
     }) 
     .fail(function(response) { 
     alert("error"); 
     }); 
</script>