PHP Classes

File: giglabel.php

Recommend this page to a friend!
  Classes of Karl Holz   Gig Cable Label   giglabel.php   Download  
File: giglabel.php
Role: Example script
Content type: text/plain
Description: Gig Cable label as web service, Accepts GET,POST,PUT and DELETE HTTP methods on select resources
Class: Gig Cable Label
Generate label images in resistors code colours
Author: By
Last change:
Date: 11 years ago
Size: 8,924 bytes
 

Contents

Class file image Download
<?php

/*
Gig Cable Label Class demo

 */
/***************************************************************************************************************
 * HTTP/1.0 2XX Success Pages
************************************************************************************************************* */
function success_201($url) {
 
header("HTTP/1.0 201 Created");
 
header("Location: ".$url);
}

/***************************************************************************************************************
 * HTTP/1.0 4XX Error Pages
************************************************************************************************************* */
function error_400() {
 
header("HTTP/1.0 400 Bad Request");
 echo
"<h1>HTTP/1.0 400 Bad Request</h1>";
 echo
"This request failed to load this resource<br />";
 echo
"Bad Request: ".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."<br />";
 echo
"Go back to the <a href='".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."' >Main</a> page";
  exit();
}

function
error_403() {
 
header("HTTP/1.0 403 Forbidden");
 echo
"<h1>HTTP/1.0 403 Forbidden</h1>";
 echo
"You're not allowed to request this resource this way <br />";
 echo
"Bad Request: ".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."<br />";
 echo
"Go back to the <a href='".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."' >Main</a> page";
  exit();
}

function
error_404() {
 
header("HTTP/1.0 404 Not Found");
 echo
"<h1>HTTP/1.0 404 Not Found</h1>";
 echo
"Couldn't find the requested resource<br />";
 echo
"Requested Resource: ".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."<br />";
 echo
"Go back to the <a href='".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."' >Main</a> page";
  exit();
}

function
error_405() {
 
header("HTTP/1.0 405 Method Not Allowed");
 echo
"<h1>HTTP/1.0 405 Method Not Allowed</h1>";
 echo
"You're not allowed to do this type of request on this resource<br />";
 echo
"Requested Resource: ".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."<br />";
 echo
"Go back to the <a href='".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."' >Main</a> page";
  exit();
}

function
error_410() {
 
header("HTTP/1.0 410 Gone");
 echo
"<h1>HTTP/1.0 410 Gone</h1>";
 echo
"This Resource is gone<br />";
 echo
"Requested Resource: ".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."<br />";
 echo
"Go back to the <a href='".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."' >Main</a> page";
  exit();
}

function
error_412() {
 
header("HTTP/1.0 412 Precondition Failed");
 echo
"<h1>HTTP/1.0 412 Precondition Failed</h1>";
 echo
"couldn't create/update the resource, try again<br />";
 echo
"Requested Resource: ".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."<br />";
 echo
"Go back to the <a href='".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."' >Main</a> page";
  exit();
}

function
error_413() {
 
header("HTTP/1.0 413 Request Entity Too Large");
 echo
"<h1>HTTP/1.0 413 Request Entity Too Large</h1>";
 echo
"You're discription is too large for this resource<br />- Consider lowering the Error Correction Capability <br />";
 echo
"Requested Resource: ".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."<br />";
 echo
"Go back to the <a href='".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."' >Main</a> page";
 exit();
}
/***************************************************************************************************************
 * HTTP application/json header
************************************************************************************************************* */
function json_header() {
     
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
     
header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT");
     
header("Cache-Control: no-cache, must-revalidate");
     
header("Pragma: no-cache");
     
header("Content-type: application/json");
}
/** ************************************************************************************************************* */
  /**
  * Genarates an UUID
  *
  * @author Anis uddin Ahmad <admin@ajaxray.com>
  * @link http://www.phpclasses.org/package/4427-PHP-Generate-feeds-in-RSS-1-0-2-0-an-Atom-formats.html ref
  * @param string an optional prefix
  * @return string the formated uuid
  */
 
function uuid($key = null, $prefix ='QR') {
   
$key = ($key == null)? 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] : $key;
   
$chars = md5($key);
   
$uuid = substr($chars,0,8) . '-';
   
$uuid .= substr($chars,8,4) . '-';
   
$uuid .= substr($chars,12,4) . '-';
   
$uuid .= substr($chars,16,4) . '-';
   
$uuid .= substr($chars,20,12);
    return
$prefix .'-'. $uuid;
  }

require_once
'gigcablelabel.class.php';
// view switcher
if (array_key_exists('ORIG_PATH_INFO', $_SERVER)) { $rest=$_SERVER['ORIG_PATH_INFO']; }
elseif (
array_key_exists('PATH_INFO', $_SERVER)) { $rest=$_SERVER['PATH_INFO']; } else { $rest=''; }
// imgdata
if (array_key_exists('QUERY_STRING', $_SERVER)) { $imgdata=$_SERVER['QUERY_STRING']; } else { $imgdata=''; }
// RESTful CRUD access switcher
if (array_key_exists('REQUEST_METHOD', $_SERVER)) { $method=$_SERVER['REQUEST_METHOD']; } else { $method=''; }

//
$webdir=str_replace($_SERVER['DOCUMENT_ROOT'], '', dirname(__FILE__));
      
//

if ($rest) {
 
$r=explode('/', $rest);
 
array_shift($r); // drop blank before /
 
$page=array_shift($r);
 switch (
$page) {
    case
'feed':
    
// Make dir
    
if($method == 'POST') {
     
$p=file_get_contents("php://input");
     
$post=json_decode($p, true);
     
$dir=GigCableLabel::dir().'/'.$post['project'];
      if (!
is_dir($dir)) mkdir($dir, 0750, true);
     
success_201('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
     } else {
     
$p=array_shift($r);
      if (
$p == '' ) { error_400(); }
     
$dir=GigCableLabel::dir().'/'.$p;
      if (!
is_dir($dir)) error_404();
     }

     if(
$method == 'DELETE') {
      
$d=glob($dir.'/*.json');
      
$f=$dir.'/'.$imgdata.'.json';
       if (
in_array($f, $d)) {
        if (
is_file($f)) {
        
unlink($f);
        } else {
error_410(); }
       } else {
error_404(); }
       unset(
$d);
     }
    
     if (
$method == 'PUT') {
     
$j=file_get_contents("php://input");
     
$file=json_decode($j, true);
      if (!
array_key_exists('code',$file) && !ctype_alnum ($file['code'])) error_404();
      if (!
array_key_exists('width',$file) && !ctype_alnum ($file['width'])) error_404();
      if (!
array_key_exists('height',$file) && !ctype_alnum ($file['height'])) error_404();
      if (!
array_key_exists('x',$file) && !is_numeric($file['x'])) error_404();
      if (!
array_key_exists('y',$file) && !is_numeric($file['y'])) error_404();

     
$file['published']=gmdate(DATE_ATOM,time());
     
$name=$dir."/".str_replace(':', '|', $file['published']).".json";
     
$file['file']=$name;
     
$file['url']='http://'.$_SERVER['HTTP_HOST'].$webdir.trim($name, '.');
     
$file['id']=uuid($name, $file['code']);
     
$file['put']='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
     
$file['project']=$p;
     
$json=json_encode($file, JSON_ERROR_SYNTAX);
      if (!
file_put_contents( $name, $json)) { error_412(); }
     
json_header();
      echo
$json;
      exit();
   
     } elseif(
$method == 'DELETE' || $method == 'GET' || $method == 'POST') {
     
$uri='http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
     
$id=uuid($uri, 'atom');
     
$date=gmdate(DATE_ATOM,time());
     
json_header();
     
$j=glob($dir."/*.json");
     
$proj=array();
      foreach (
$j as $c) {
      
$link='http://'.$_SERVER['HTTP_HOST'].$webdir.trim($c, '.');
      
$f=file_get_contents($c);
      
$json=json_decode($f, true);
      
$proj[]=$json;
     }
     echo
json_encode($proj);
     exit();
     } else {
error_405(); }
    break;
    case
'ui.json': GigCableLabel::load_ui(); break;
    case
'print':
       
$width=array_shift($r);
       
$height=array_shift($r);
       
$x=array_shift($r);
       
$y=array_shift($r);
       
$img_style=array_shift($r);
       
GigCableLabel::print_page($width, $height,$x,$y,$img_style,$imgdata) || error_404();
    break;
    case
'label':
       
$code=array_shift($r);
        if (!
ctype_alnum ($code)) error_404();
       
$label=new GigCableLabel($code);
       
$label->make_label();
    break;
    case
'QR':
       
$lvl=array_shift($r);
        if (!
ctype_upper($lvl)) error_404();
       
$code=array_shift($r);
        if (!
ctype_alnum ($code)) error_404();
       
$desc=trim(implode('//', $r), '/');
       
$label=new GigCableLabel($code);
       
$label->qr=TRUE;
       
$label->errorCorrectionLevel=$lvl;
        if (
$label->desc=trim($desc)) {
         
$label->make_label();
        } else {
error_413(); }
    break;
 }
 exit();
}
//$label=new GigCableLabel();
//exit();
?>