Skip to content

Instantly share code, notes, and snippets.

@larikraun
Created January 14, 2016 10:00
Show Gist options
  • Select an option

  • Save larikraun/e55fa332e9bf14f586da to your computer and use it in GitHub Desktop.

Select an option

Save larikraun/e55fa332e9bf14f586da to your computer and use it in GitHub Desktop.

Revisions

  1. Omolara Adejuwon created this gist Jan 14, 2016.
    94 changes: 94 additions & 0 deletions DataSyncHandler.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,94 @@
    <?php

    /**
    * Created by PhpStorm.
    * User: Omolara Adejuwon
    * Date: 18/11/2015
    * Time: 11:10
    */
    require_once("./db_function.php");

    class DataSyncHandler
    {
    private $tableName;
    private $db;

    public function __construct($tableName = "users")
    {
    //$this->tableName = $tableName;
    $this->db = new DB_Function();
    }

    public function compareData($tableName = "users", $idsFromDevice = "35,10,1,5,32,9")
    {
    $idsFromDeviceArray = explode(",", $idsFromDevice);
    $idResource = $this->db->getIDs($tableName);
    $idsArray = array();
    while ($row = mysqli_fetch_assoc($idResource)) {
    $idsArray[] = $row["id"];
    }
    $a = $this->flip_isset_diff($idsFromDeviceArray, $idsArray);//returns missing ids from server
    $b = $this->large_array_diff($idsFromDeviceArray, $idsArray);
    $c = $this->my_array_diff($idsFromDeviceArray, $idsArray);
    $d = $this->flip_isset_diff($idsArray, $idsFromDeviceArray); //returns missing ids from device
    $e = $this->large_array_diff($idsArray, $idsFromDeviceArray);
    $f = $this->my_array_diff($idsArray, $idsFromDeviceArray);
    return array("flip" => $a, "diff" => $b, "my_diff" => $c, "flip_device" => $d, "diff_device" => $e, "my_diff_device" => $f);
    }

    function flip_isset_diff($b, $a)
    {
    $start = microtime(true);
    $at = array_flip($a);
    $d = array();
    foreach ($b as $i)
    if (!isset($at[$i]))
    $d[] = $i;
    echo (microtime(true) - $start) . PHP_EOL;
    return $d;
    }

    function large_array_diff($b, $a)
    {
    // Flipping
    $start = microtime(true);
    $at = array_flip($a);
    $bt = array_flip($b);
    // checking
    $d = array_keys(array_diff_key($bt, $at));
    echo (microtime(true) - $start) . PHP_EOL;
    return $d;
    }

    function my_array_diff($b, $a)
    {
    $start = microtime(true);
    $d = array_values(array_diff($b, $a));
    echo (microtime(true) - $start) . PHP_EOL;
    return $d;

    }

    function getAndInsertDataFromDevice($tableName = "users", $dataFromDevice)
    {
    $columns = implode(", ", array_keys($dataFromDevice));
    $escaped_values = array_map(array($this, 'escape'), $dataFromDevice);
    $values = "'" . implode("','", $escaped_values) . "'";
    return $this->db->insertData($tableName, $columns, $values);
    }

    function escape($array)
    {
    return mysql_real_escape_string($this->db->mysqli, $array);
    }

    function sendDataToDevice($tableName = "users", $idsFromDevice = "12,26,29")
    {
    $idResource = $this->db->getDataWhereID($tableName, $idsFromDevice);
    $idsArray = array();
    while ($row = mysqli_fetch_assoc($idResource)) {
    $idsArray[] = $row;
    }
    return $idsArray;
    }
    }
    64 changes: 64 additions & 0 deletions data_sync.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,64 @@
    <?php
    /**
    * Created by PhpStorm.
    * User: Omolara Adejuwon
    * Date: 18/11/2015
    * Time: 18:22
    */
    require_once("./DataSyncHandler.php");
    $dataSyncHandler = new DataSyncHandler();
    header("Content-Type: application/json"); //set content type to application/json
    if (isset($_GET["operation"])) {
    $operation = $_GET["operation"];
    switch ($operation) {
    case "compare":
    if (isset($_GET["tableName"]) && isset($_GET["ids"])) {
    $tableName = $_GET["tableName"];
    $ids = $_GET["ids"];
    header("HTTP/1.1 200 OK");
    echo json_encode(array("response_code" => 200, "data" => $dataSyncHandler->compareData($tableName, $ids)));
    } else {
    header("HTTP/1.1 400 Bad Request");
    echo json_encode(array("response_code" => 400, "message" => "Some parameters are missing"));
    }
    break;
    case "upload":
    if (isset($_GET["tableName"])) {
    $tableName = $_GET["tableName"];
    $json = file_get_contents("php://input");
    $dataArray = json_decode($json, true);
    $response = array();

    if (is_array($dataArray) || is_object($dataArray)) {
    print_r($dataArray["data"]);
    $response = array();
    for ($x = 0; $x < count($dataArray["data"]); $x++) {
    echo "<br>";
    $response = $dataSyncHandler->getAndInsertDataFromDevice($tableName, $dataArray["data"][$x]);
    // print_r(array_values($dataArray[$key][0]));
    }

    }
    header("HTTP/1.1 200 Bad Request");
    echo json_encode(array("response_code" => 200, "data" => $response));
    } else {
    header("HTTP/1.1 400 Bad Request");
    echo json_encode(array("response_code" => 400, "message" => "Some parameters are missing"));
    }
    break;
    case "download":
    if (isset($_GET["tableName"]) && isset($_GET["ids"])) {
    $tableName = $_GET["tableName"];
    $ids = $_GET["ids"];
    header("HTTP/1.1 200 OK");
    echo json_encode(array("response_code" => 200, "data" => $dataSyncHandler->sendDataToDevice($tableName, $ids)));
    } else {
    header("HTTP/1.1 400 Bad Request");
    echo json_encode(array("response_code" => 400, "message" => "Some parameters are missing"));
    }
    break;
    }
    } else {
    header("HTTP/1.1 400 Bad Request");
    echo json_encode(array("response_code" => 400, "message" => "Some parameters are missing"));
    }