DownloadPapyrus: Storing data in the file system with PHP
Generalities
The Papyrus package can store information in files, perform queries, updates, and deletes data . All this, based on a primary key or identifier. The information is stored in JSON format. 
Installation
To install via composer (http://getcomposer.org/), place the following in your composer.json file: 
{
    "require": {
        "barbosa/papyrus": "dev-master"
    }
}
 
or download package from github.com: 
http://github.com/barbosa89/papyrus
 
Configuration
Papyrus need to run an array of configurations and a path to the folder containing the files storage. 
Configuration array
Create an array of configurations in a file or in the file which instances to Papyrus. The array must have two key, extension and files:  
<?php
/
 * Example in a configurations file. 
 */
 
return [
 
        'extension'	=>	'.project',
 
        'files' =>  [
                    'users' => ['dni(int#)', 'name', 'lastName']
                    ]
       ];
 
Other way, in the file which instances to Papyrus: 
<?php 
 
require 'vendor/autoload.php';
 
use \Barbosa\Papyrus\Papyrus;
 
$config = [
 
        'extension' =>  '.project',
 
        'files' =>  [
                    'users' => ['dni(int#)', 'name', 'lastName']
                    ]
        ];
 
$papyrus = new Papyrus($config);
 
This extension is for all files: 
'extension' => '.project'
 
The file structure represents fields in a SQL table , what is in brackets, are the fields of each file: 
'files' => [
 
    'fileName' => ['primaryKey(int#)', 'field', 'otherField'],
    'otherFileName' => ['primaryKey(str#)', 'field', 'otherField']
	
    ]
 
The options for primary key: 
Auto increment integer (int++)
Unique integer (int#)
Unique string (str#)
 
Absolute storage folder path
Storage files that are configured in the array must be created in a folder chosen by the user, the folder path should be passed to Papyrus: 
<?php 
 
require 'vendor/autoload.php';
 
use \Barbosa\Papyrus\Papyrus;
 
/
 * Complete example. 
 */
 
$config = [
 
        'extension' =>  '.project',
 
        'files' =>  [
                    'users' => ['dni(int#)', 'name', 'lastName']
                    ]
        ];
 
$path = realpath(__DIR__ . '/storageFolder/');
 
$papyrus = new Papyrus($config, $path);
 
You can also switch configurations through methods: 
<?php 
 
require 'vendor/autoload.php';
 
use \Barbosa\Papyrus\Papyrus;
 
/
 * Complete example with setters. 
 */
 
$papyrus = new Papyrus();
 
$papyrus->setStoragePath(realpath(__DIR__ . '/storageFolder/'));
 
$config = [
 
        'extension' =>  '.project',
 
        'files' =>  [
                    'users' => ['dni(int#)', 'name', 'lastName']
                    ]
        ];
 
$papyrus->loadConfigurations($config);
 
Creating of storage files
As example, a file will be created with registers name and the extension .data: 
$ touch path/to/storageFolder/registers.data
 
In the console: 
$ ls -l
-rwx---rw- 1 user user 494 jul  8 21:10 registers.data
 
You can add every files that you need. 
Permissions (Only in Linux)
Files in the storage folder (path/to/storageFolder/):  
chmod 706 fileName.extension
 
Example: 
chmod 706 registers.data
 
Quick Start and Examples
For purposes of explaining with examples , it is assumed that there is a file called users with the following structure: 
'files' => [
	'users' => ['dni(int#)', 'name', 'lastName']
	]
 
Field dni(int#), indicates that is the primary key and a unique integer. 
Require the autoload file: 
require 'vendor/autoload.php';
 
use \Barbosa\Papyrus\Papyrus;
 
Insert
$values = ['dni' => 123456, 'name' => 'Tony', 'lastName' => 'Stark'];
 
$papyrus = new Papyrus();
$papyrus->insertInto('users')->values($values)->runQuery();
 
Select
The where method can only receive a value of array type, which should be the primary key or identifier. 
Select all content in a file with all fields.
$papyrus->select()->from('users')->runQuery();
 
Select all content in a file with some fields.
$papyrus->select('dni, name')->from('users')->runQuery();
 
Select a record with all fields.
$papyrus->select()->from('users')->where(['dni' => 123456])->runQuery();
 
Select a record with some fields
$papyrus->select('dni, name')->from('users')->where(['dni' => 123456])->runQuery();
 
Select records without 'Where' clausule, sorted by a field with value ASC or DESC.
$papyrus->select()->from('users')->orderBy(['name' => 'ASC'])->runQuery();
 
$papyrus->select('dni, lastName')->from('users')->orderBy(['lastName' => 'ASC'])->runQuery();
 
Select records without 'Where' clausule but with limitation.
$papyrus->select()->from('users')->limit(3)->runQuery();
 
$papyrus->select()->from('users')->limit(3)->orderBy(['name' => 'DESC'])->runQuery();
 
Delete
Delete all records
$papyrus->deleteFrom('users')->runQuery();
 
Delete a record
$papyrus->deleteFrom('users')->where(['dni' => 123456])->runQuery();
 
Update
The primary key of a record can not be modified. 
Update all records
$data = ['name' => 'Tony', 'lastname' => 'Stark'];
 
$papyrus->update('users')->set($data)->runQuery();
 
Update a record
$data = ['name' => 'Tony', 'lastName' => 'The Iron Man'];
 
$papyrus->update('users')->set($data)->where(['dni' => 123456])->runQuery();
 
Get the data of query
$papyrus->getRecords();
 
Get the status of query
$papyrus->getStatus();
 
Available methods
Papyrus::select($fields);
Papyrus::deleteFrom($file = '');
Papyrus::update($file = '');            
Papyrus::from($file = '');
Papyrus::insertInto($file = '');
Papyrus::set(array $data = null);
Papyrus::values(array $data = null);
Papyrus::where(array $conditions = null);
Papyrus::orderBy(array $order = null);
Papyrus::limit($limit = 0);
Papyrus::runQuery();
Papyrus::getRecords();
Papyrus::getStatus();
$papyrus->loadConfigurations(array $config = null);
$papyrus->setStoragePath($path = '');
 
Contribute
- 
Check for open issues or open a new issue to start a discussion around a bug or feature.
 
- 
Fork the repository on GitHub to start making your changes.
 
- 
Write one or more tests for the new feature or that expose the bug.
 
- 
Make code changes to implement the feature or fix the bug.
 
- 
Send a pull request to get your changes merged and published.
 
 
Thanks... 
 |