diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..925c07f
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,41 @@
+APP_NAME=Laravel
+APP_ENV=local
+APP_KEY=
+APP_DEBUG=true
+APP_BIND=0.0.0.0
+APP_PORT=516
+APP_URL=http://localhost
+
+LOG_CHANNEL=stack
+
+DB_CONNECTION=mysql
+DB_HOST=127.0.0.1
+DB_PORT=3306
+DB_DATABASE=homestead
+DB_USERNAME=homestead
+DB_PASSWORD=secret
+
+BROADCAST_DRIVER=log
+CACHE_DRIVER=file
+QUEUE_CONNECTION=sync
+SESSION_DRIVER=file
+SESSION_LIFETIME=120
+
+REDIS_HOST=127.0.0.1
+REDIS_PASSWORD=null
+REDIS_PORT=6379
+
+MAIL_DRIVER=smtp
+MAIL_HOST=smtp.mailtrap.io
+MAIL_PORT=2525
+MAIL_USERNAME=null
+MAIL_PASSWORD=null
+MAIL_ENCRYPTION=null
+
+PUSHER_APP_ID=
+PUSHER_APP_KEY=
+PUSHER_APP_SECRET=
+PUSHER_APP_CLUSTER=mt1
+
+MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
+MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..967315d
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,5 @@
+* text=auto
+*.css linguist-vendored
+*.scss linguist-vendored
+*.js linguist-vendored
+CHANGELOG.md export-ignore
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..85cc11b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,17 @@
+/node_modules
+/public/hot
+/public/storage
+/storage/*.key
+/vendor
+/.idea
+/.vscode
+/nbproject
+/.vagrant
+Homestead.json
+Homestead.yaml
+npm-debug.log
+yarn-error.log
+.env
+.phpunit.result.cache
+devel/
+data/
diff --git a/app/Classes/Frame.php b/app/Classes/Frame.php
new file mode 100644
index 0000000..e262461
--- /dev/null
+++ b/app/Classes/Frame.php
@@ -0,0 +1,299 @@
+'systel','n'=>'username','a'=>'address#','d'=>'%date'];
+ public $fields = NULL; // The fields in this frame.
+
+ // @todo Move this to the database
+ private $header = RED.'T'.BLUE.'E'.GREEN.'S'.YELLOW.'T'.MAGENTA.'!';
+
+ public function __construct(\App\Models\Frame $o,string $msg=NULL)
+ {
+ $this->frame = $o;
+
+ $this->output = $this->hasFlag('clear') ? CLS : HOME;
+
+ if ($msg)
+ $this->output .= UP.$msg.HOME;
+
+ if (! $this->hasFlag('ip')) {
+ // Set the page header: CUG/Site Name | Page # | Cost
+ $this->output .= $this->render_header($this->header).
+ $this->render_page($this->frame->frame_id,$this->frame->subframe_id).
+ $this->render_cost($this->frame->cost);
+ }
+
+ // Calculate fields and render output.
+ $this->fields();
+ }
+
+ public function __toString()
+ {
+ return $this->output;
+ }
+
+ /**
+ * Convert the frame from Binary to Output
+ * Look for fields within the frame.
+ *
+ * @param int $startline
+ */
+ public function fields($startline=0)
+ {
+ $infield = FALSE;
+ $this->fields = collect();
+
+ if ($startline)
+ $this->output .= str_repeat(DOWN,$startline);
+
+ // $fieldadrline = 1;
+
+ // Scan the frame for a field start
+ for ($y=$startline;$y<=$this->frame_length;$y++)
+ {
+ $fieldx = $fieldy = FALSE;
+
+ for ($x=0;$x<$this->frame_width;$x++)
+ {
+ $posn = $y*40+$x;
+ $byte = ord(isset($this->frame->frame_content{$posn}) ? $this->frame->frame_content{$posn} : ' ')%128;
+ // dump(sprintf('Y: %s,X: %s, POSN: %s, BYTE: %s',$y,$x,$posn,$byte));
+
+ // Check for start-of-field
+ if ($byte == ord(ESC)) { // Esc designates start of field (Esc-K is end of edit)
+ $infield = TRUE;
+ $fieldlength = 0;
+ $fieldtype = ord(substr($this->frame->frame_content,$posn+1,1))%128;
+ $byte = ord(' '); // Replace ESC with space.
+
+ } else {
+ if ($infield) {
+ if ($byte == $fieldtype) {
+ $fieldlength++;
+ $byte = ord(' '); // Replace field with space.
+
+ if ($fieldx === false) {
+ $fieldx = $x;
+ $fieldy = $y;
+ }
+
+ // Is this a magic field?
+ // @todo For page redisplay *00, we should show entered contents - for refresh *09 we should show updated contents
+ if (array_get($this->fieldmap,chr($fieldtype)) ) {
+ $field = $this->fieldmap[chr($fieldtype)];
+ //dump(['infield','byte'=>$byte,'fieldtype'=>$fieldtype,'field'=>$field,'strpos'=>strpos($field,'#')]);
+
+ /*
+ // address field has many lines. increment when hit on first character.
+ if ($fieldlength == 1 && strpos($field,'#') !== false) {
+ $field = str_replace('#',$fieldadrline,$field);
+ dump(['field'=>$field,'fieldadrline'=>$fieldadrline,'fieldadrline'=>$fieldadrline]);
+ $fieldadrline++;
+ }
+ */
+
+ // Replace field with Date
+ if ($field == '%date') {
+ if ($fieldlength == 1)
+ $datetime = strtoupper(date('D d M Y H:i:s'));
+
+ if ($fieldlength <= strlen($datetime))
+ $byte = ord($datetime{$fieldlength-1});
+
+ }
+
+ // @todo user data
+ /* else if (isset($user[$field])) {
+ if ($fieldlength <= strlen($user[$field])) {
+ $byte = ord($user[$field]{$fieldlength-1});
+ }
+ } /*else // pre-load field contents. PAM or *00 ?
+ if (isset($fields[what]['value'])) {
+
+ } */
+
+ }
+
+ } else {
+ Log::debug(sprintf('Frame: %s%s, Field found at [%s,%s], Type: %s, Length: %s','TBA','TBA',$fieldx,$fieldy,$fieldtype,$fieldlength));
+
+ $this->fields->push([
+ 'type'=>chr($fieldtype),
+ 'length'=>$fieldlength,
+ 'x'=>$fieldx,
+ 'y'=>$fieldy,
+ ]);
+
+ $infield = FALSE;
+ $fieldx = $fieldy = FALSE;
+ }
+ }
+ }
+
+ // truncate end of lines
+ if (isset($pageflags['tru']) && substr($this->frame->frame_content,$y*40+$x,40-$x) === str_repeat(' ',40-$x)) {
+ $this->output .= CR . LF;
+ break;
+ }
+
+ $this->output .= ($byte < 32) ? ESC.chr($byte+64) : chr($byte);
+ }
+ }
+ }
+
+ /**
+ * Return the Frame Number
+ */
+ public function framenum()
+ {
+ return $this->frame->frame_id.$this->frame->subframe_id;
+ }
+
+ /**
+ * Return the flag for this page
+ *
+ * CLEAR: Clear Screen before rendering.
+ *
+ * @param $flag
+ * @return bool
+ */
+ private function hasFlag($flag)
+ {
+ return $this->frame->hasFlag($flag);
+ }
+
+ /**
+ * Render the cost of the frame
+ *
+ * @param int $cost
+ * @return string
+ * @throws \Exception
+ */
+ private function render_cost(int $cost)
+ {
+ if ($cost > 999)
+ throw new \Exception('Price too high');
+
+ if ($cost > 100)
+ $color = RED;
+ elseif ($cost > 0)
+ $color = YELLOW;
+ else
+ $color = GREEN;
+
+ return sprintf($color.'% '.$this->cost_length.'.0f%s',$cost,$this->cost_unit);
+ }
+
+ /**
+ * Render the Site Header
+ *
+ * @param string $header
+ * @return bool|string
+ */
+ private function render_header(string $header)
+ {
+ $filler = ($this->strlenv($header) < $this->header_length) ? str_repeat(' ',$this->header_length-$this->strlenv($header)) : '';
+
+ return substr($header.$filler,0,$this->header_length+substr_count($this->header,ESC));
+ }
+
+ /**
+ * Render the Frame Number
+ *
+ * @param int $num
+ * @param string $frame
+ * @return string
+ * @throws \Exception
+ */
+ private function render_page(int $num,string $frame)
+ {
+ if ($num > 999999999)
+ throw new \Exception('Page Number too big',500);
+
+ if (strlen($frame) !== 1)
+ throw new \Exception('Frame invalid',500);
+
+ return sprintf(WHITE.'% '.$this->pagenum_length.'.0f%s',$num,$frame);
+ }
+
+ /**
+ * Calculate the length of text
+ *
+ * ESC characters are two chars, and need to be counted as one.
+ *
+ * @param $text
+ * @return int
+ */
+ function strlenv($text) {
+ return strlen($text)-substr_count($text,ESC);
+ }
+
+ public static function testFrame()
+ {
+ // Simulate a DB load
+ $o = new \App\Models\Frame;
+
+ $o->frame_content = '';
+ $o->flags = ['ip'];
+ $o->frametype = 'a';
+ $o->frame_id = 999;
+ $o->subframe_id = 'a';
+
+ // Header
+ $o->frame_content .= substr(R_RED.'T'.R_BLUE.'E'.R_GREEN.'S'.R_YELLOW.'T-12345678901234567890',0,20).
+ R_WHITE.'999999999a'.R_RED.sprintf('%07.0f',999).'u';
+
+ $o->frame_content .= str_repeat('+-',18).' '.R_RED.'01';
+ $o->frame_content .= 'Date: '.ESC.str_repeat('d',25).str_repeat('+-',4);
+ $o->frame_content .= 'Name: '.ESC.str_repeat('u',5).str_repeat('+-',14);
+ $o->frame_content .= 'Address: '.ESC.str_repeat('a',20).''.str_repeat('+-',5);
+ $o->frame_content .= ' : '.ESC.str_repeat('a',20).''.str_repeat('+-',5);
+
+ return $o;
+ }
+
+ /**
+ * Return the Frame Type
+ */
+ public function type()
+ {
+ return $this->frame->type();
+ }
+}
\ No newline at end of file
diff --git a/app/Console/Commands/Server.php b/app/Console/Commands/Server.php
new file mode 100644
index 0000000..89215bd
--- /dev/null
+++ b/app/Console/Commands/Server.php
@@ -0,0 +1,928 @@
+['edit'=>TRUE],'a'=>['edit'=>TRUE]];
+
+ /**
+ * The name and signature of the console command.
+ *
+ * @var string
+ */
+ protected $signature = 'server';
+
+ /**
+ * The console command description.
+ *
+ * @var string
+ */
+ protected $description = 'Start Videotex Server';
+
+ /**
+ * Create a new command instance.
+ *
+ * @return void
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ }
+
+ /**
+ * Execute the console command.
+ *
+ * @return mixed
+ * @throws \Sock\SocketException
+ */
+ public function handle()
+ {
+ /**
+ * Check dependencies
+ */
+ if (! extension_loaded('sockets' ) ) {
+ throw new SocketException(SocketException::CANT_ACCEPT,'Missing sockets extension');
+ }
+
+ if (! extension_loaded('pcntl' ) ) {
+ throw new SocketException(SocketException::CANT_ACCEPT,'Missing pcntl extension');
+ }
+
+ // @todo Deprecate this function
+ define('MSG_TIMEWARP_ON', WHITE . 'TIMEWARP ON' . GREEN . 'VIEW INFO WITH *02');
+ define('MSG_TIMEWARP_OFF', WHITE . 'TIMEWARP OFF' . GREEN . 'VIEWING DATE IS FIXED');
+ define('MSG_TIMEWARP_TO', GREEN . 'TIMEWARP TO %s');
+ define('MSG_TIMEWARP', WHITE . 'OTHER VERSIONS EXIST' . GREEN . 'KEY *02 TO VIEW');
+
+ // @todo Deprecate this
+ include_once('classes/vvdatabase.class.php');
+
+ $server = new SocketServer(config('app.port'),config('app.bind'));
+ $server->init();
+ $server->setConnectionHandler([$this,'onConnect']);
+ $server->listen();
+ }
+
+ /**
+ * Connection handler
+ */
+ function onConnect(SocketClient $client) {
+ Log::info('Connection from: ',['client'=>$client->getAddress()]);
+
+ // @todo To Deprecate in favour of config()
+ global $config;
+ include ('config/config.php');
+
+ $childpid = pcntl_fork();
+
+ if ($childpid == -1)
+ throw new SocketException(SocketException::CANT_ACCEPT,'Could not fork process');
+
+ // Parent return ready for next connection
+ elseif ($childpid)
+ return;
+
+ // We are now the child.
+ // @todo Need to intercept any crashes and close the TCP port.
+
+ $session_init = $session_option = FALSE;
+ $session_note = ''; // TCP Session Notice
+ $session_term = ''; // TCP Terminal Type
+
+ $client->send(TCP_IAC.TCP_DO.TCP_OPT_SUP_GOAHEAD); // DO SUPPRES GO AHEAD
+ $client->send(TCP_IAC.TCP_WONT.TCP_OPT_LINEMODE); // WONT LINEMODE
+ $client->send(TCP_IAC.TCP_DO.TCP_OPT_ECHO); // DO ECHO
+// $client->send(TCP_IAC.TCP_AYT); // AYT
+ $client->send(TCP_IAC.TCP_DO.TCP_OPT_TERMTYPE.TCP_IAC.TCP_SB.TCP_OPT_TERMTYPE.TCP_OPT_ECHO.TCP_IAC.TCP_SE); // Request Term Type
+
+ $client->send(CLS);
+ $read = '';
+
+ // @todo Deprecate and have an exception handler handle this.
+ // like throw new FatalClientException(CLS.UP.ERR_DATABASE,500,NULL,$client);
+
+ // @todo Get the login page, and if it is not available, throw the ERR_DATEBASE error.
+
+ $db = new \vvdb();
+ // Connect to database. Returns error message if unable to connect.
+ $r = $db->connect($config['dbserver'],$config['database'],$config['dbuser'], $config['dbpass']);
+ /*
+ if (!empty($r)) {
+ http_response_code(500);
+ $client->send(CLS . UP . ERR_DATABASE);
+ die ($r);
+ }
+ */
+
+ // $user will eventually contain validated user details.
+ $user = array( 'systel' => '019990001',
+ 'username' => 'DEMONSTRATION DATA USER',
+ 'address1' => '8 HERBAL HILL',
+ 'address2' => 'LONDON',
+ 'address3' => 'EC1R 5EJ',
+ 'address4' => '',
+ 'address5' => '',
+ 'CUGS' => array( 7800, 15500), // Closed User Groups this user has access to
+ );
+
+ $history = array(); // backup history
+
+ $cmd = ''; // current *command being typed in
+ $mode = false; // input mode.
+ $prevmode = false; // previous mode
+ $timewarp = false;
+ $action = ACTION_GOTO; // do something if set. used here to trigger a goto to the login form.
+ if (isset($config['loginpage'])) {
+ $page = $config['loginpage'];
+ $subpage = 'a';
+ } else if (!empty($service['start_page'])) {
+ $page = $service['start_page'];
+ $subpage = 'a';
+ } else {
+ $page = '999'; // next page
+ $subpage = 'a';
+ }
+ $curpage = ''; // current page
+ $cursub = '';
+ $curfield = null; // current input field
+ $curfp = 0; // current field, position within.
+ $blp = 0; // botton line polluted (by this no. of characters)
+ $resetpsn = false; // flag to reset position (used in fields)
+
+ if (! isset($config['varient_id']))
+ $config['varient_id'] = NULL;
+ $service = $db->getServiceById($config['service_id']);
+ //dd($service);
+ $varient = $db->getAllVarients($config['service_id'], $config['varient_id']);
+ if ($varient === false) {
+ die ("no varient");
+ }
+ $varient = reset($varient);
+
+
+ $matches = array();
+ if (preg_match('@'.$service['page_format'].'@',$service['start_frame'],$matches)) {
+ $page = $matches[1];
+ $subpage = $matches[2];
+ echo " Using start page ".$page.$subpage."\n";
+ }
+// $start = $service['start_frame'];
+// where to start from
+
+ while( $action != ACTION_TERMINATE ) {
+ // Read a character from the client session
+ $read = $client->read(1);
+
+ if ($read != '') {
+ dump(sprintf('Mode: [%s] CMD: [%s] frame: [%s] Received [%s (%s)]',$mode,$cmd,$page,$read,ord($read)));
+
+ // Client initiation input
+ // TELNET http://pcmicro.com/netfoss/telnet.html
+ if ($read == TCP_IAC OR $session_init OR $session_option)
+ {
+ Log::debug(sprintf('Session Char (%s)',ord($read)),['init'=>$session_init,'option'=>$session_option]);
+
+ switch ($read) {
+ // Command being sent.
+ case TCP_IAC:
+ $session_init = TRUE;
+ $session_note = 'IAC ';
+
+ continue 2;
+
+ case TCP_SB:
+ $session_option = TRUE;
+
+ continue 2;
+
+ case TCP_SE:
+ $session_option = $session_init = FALSE;
+ Log::debug('Session Terminal: '.$session_term);
+
+ break;
+
+ case TCP_DO:
+ $session_note .= 'DO ';
+
+ continue 2;
+
+ case TCP_WILL:
+ $session_note .= 'WILL ';
+
+ continue 2;
+
+ case TCP_WONT:
+ $session_note .= 'WONT ';
+
+ continue 2;
+
+ case TCP_OPT_TERMTYPE:
+
+ continue 2;
+
+ case TCP_OPT_ECHO:
+ $session_note .= 'ECHO';
+ $session_init = FALSE;
+ $read = '';
+ Log::debug($session_note);
+
+ continue;
+
+ case TCP_OPT_SUP_GOAHEAD:
+ $session_note .= 'SUPPRESS GO AHEAD';
+ $session_init = FALSE;
+ $read = '';
+ Log::debug($session_note);
+
+ continue;
+
+ default:
+ if ($session_option AND $read) {
+ $session_term .= $read;
+ $read = '';
+
+ } else {
+ Log::debug(sprintf('Unhandled char in session_init :%s (%s)',$read,ord($read)));
+ }
+ }
+ }
+
+ switch($mode){
+ // Key presses during field input.
+ case MODE_FIELD:
+ //dump(sprintf('** Processing Keypress in MODE_FIELD [%s (%s)]. Last POS [%s]',$read,ord($read),$curfp));
+ $cmd = '';
+ $action = FALSE;
+
+ switch ($fo->type()) {
+ // Input frame.
+ case 'a':
+ switch ($read) {
+ // End of field entry.
+ case HASH:
+ // Next Field
+ $curfield++;
+
+ //dump(['current'=>$curfield, 'numfields'=>count($fields)]);
+
+ if ($curfield < count($fields)) { // skip past non-editable fields
+ for ($i = $curfield; $i < count($fields); $i++) {
+ if (isset($this->fieldoptions[$fields[$i]['type']]) &&
+ $this->fieldoptions[$fields[$i]['type']]['edit']) {
+ $curfield = $i;
+ break;
+ }
+ }
+
+ if ($curfield !== false) {
+ $client->send(outputPosition($fields[$curfield]['x'],$fields[$curfield]['y']).CON);
+ $mode = MODE_FIELD;
+ $fielddate[$curfield] = '';
+
+ } else {
+ // there were no (more) editable fields.
+ $action = ACTION_SUBMITRF;
+ }
+
+ } else {
+ // done them all editable fields.
+ $action = ACTION_SUBMITRF;
+ }
+ break;
+
+ case STAR:
+ $prevmode = MODE_FIELD;
+ $action = ACTION_STAR;
+ break;
+
+ case KEY_LEFT:
+ if ($curfp) {
+ $client->send(LEFT);
+ $curfp--;
+ };
+ break;
+
+ case KEY_RIGHT:
+ if ($curfp++ < $fields[$curfield]['length']) {
+ $client->send(RIGHT);
+ //$curfp++;
+ };
+ break;
+
+ case KEY_DOWN:
+ if ($curfp + 40 < $fields[$curfield]['length']) {
+ $client->send(DOWN);
+ $curfp = $curfp + 40;
+ };
+ break;
+
+ case KEY_UP:
+ if ($curfp - 40 >= 0) {
+ $client->send($read);
+ $curfp = $curfp - 40;
+ };
+ break;
+
+ case CR:
+ if ($curfp + $fields[$curfield]['x'] > 40) { // on second or later line of a field
+ $client->send($read);
+ $curfp = (($curfp + $fields[$curfield]['x'])%40)*40;
+ } else {
+ $client->send(outputPosition($fields[$curfield]['x'],$fields[$curfield]['y']).CON);
+ $curfp = 0;
+ }
+ break;
+
+ case ESC:
+ break; ;
+
+ // Record Data Entry
+ default:
+ if (ord($read) > 31 && $curfp < $fields[$curfield]['length']) {
+ $fielddata[$curfield]{$curfp} = $read;
+ $curfp++;
+ $client->send($read);
+ }
+ }
+
+ break;
+
+ // Other Frame Types - Shouldnt get here.
+ default:
+ throw new \Exception('Shouldnt get here',500);
+
+ } // switch frame types
+
+ break;
+
+ // Form submission: 1 to send, 2 not to send.
+ case MODE_SUBMITRF:
+ switch($read){
+ // @todo Input received, process it.
+ case '1':
+ dump(['s'=>$service,'f'=>$fielddata]);
+ if(TRUE) {
+ sendBaseline($client, $blp, MSG_SENT);
+ $mode = MODE_RFSENT;
+ } else {
+ sendBaseline($client, $blp, ERR_NOTSENT);
+ $mode = MODE_RFERROR;
+ }
+ break;
+ case '2':
+
+ sendBaseline($client, $blp, MSG_NOTSENT);;
+ $mode = MODE_RFNOTSENT;
+ break;
+
+ case STAR:
+ $action = ACTION_STAR;
+ break;
+
+ }
+ break;
+
+ // Response form after Sent processing
+ // @todo To fix.
+ case MODE_RFSENT:
+ $client->send(COFF);
+
+ if ($read == HASH) {
+ if (!empty($pagedata['route1'])) {
+ $action = ACTION_GOTO;
+ $page = $pagedata['route1'];
+ $subpage = 'a';
+
+ } else if ($r = $db->getFrame($service['service_id'],$varient['varient_id'],$page,chr(1+ord($subpage)))) {
+ $action = ACTION_GOTO;
+ $page = $curpage;
+ $subpage = chr(1+ord($subpage));
+
+ } else if (!empty($pagedata['route0'])) {
+ $action = ACTION_GOTO;
+ $page = $pagedata['route0'];
+ $subpage = 'a';
+
+ // No further routes defined, go home.
+ } else {
+ $action = ACTION_GOTO;
+ $page = '0';
+ $subpage = 'a';
+ }
+
+ } elseif ($read == STAR) {
+ $action = ACTION_STAR;
+
+ break;
+ }
+
+ break;
+
+ // Response form after NOT sending
+ case MODE_RFNOTSENT:
+
+ // Response form ERROR
+ // @todo To fix
+ case MODE_RFERROR:
+ $client->send(COFF);
+
+ if ($read == HASH) {
+ if (!empty($pagedata['route2'])) {
+ $action = ACTION_GOTO;
+ $page = $pagedata['route2'];
+ $subpage = 'a';
+
+ } else if ($r = $db->getFrame($service['service_id'],$varient['varient_id'],$page,chr(1+ord($subpage)))) {
+ $action = ACTION_GOTO;
+ $page = $curpage;
+ $subpage = chr(1+ord($subpage));
+
+ } else if (!empty($pagedata['route0'])) {
+ $action = ACTION_GOTO;
+ $page = $pagedata['route0'];
+ $subpage = 'a';
+
+ // No further routes defined, go home.
+ } else {
+ $action = ACTION_GOTO;
+ $page = '0';
+ $subpage = 'a';
+ }
+
+ } else if ($read == STAR) {
+ $action = ACTION_STAR;
+
+ break;
+ }
+
+ break;
+
+ /*
+ List of alternate options has been presented
+ */
+
+ case MODE_WARPTO: // expecting a timewarp selection
+ if (isset($alts[$read - 1 ])) {
+ $v = $db->getAllVarients($config['service_id'], $alts[$read - 1]['varient_id']);
+ if (!empty($v)) {
+ $varient = reset($v);
+ $page = $curpage;
+ $subpage = $cursub;
+ $action = ACTION_GOTO;
+ break;
+ }
+ }
+ // if wasn't a valid warpto keypress,
+ //drop into
+
+ // Not doing anything in particular.
+ case FALSE:
+ $cmd = '';
+ Log::debug('Idle',['pid'=>'TBA']);
+
+ switch ($read) {
+ case HASH:
+ $action = ACTION_NEXT;
+ break;
+
+ case STAR:
+ $action = ACTION_STAR;
+ break;
+
+ // Frame Routing
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ if (isset($pagedata['route' . $read]) && $pagedata['route' . $read] != '*') {
+ $action = ACTION_GOTO;
+ $page = $pagedata['route' . $read];
+ $subpage = 'a';
+ break;
+ } else {
+ sendBaseline($client, $blp, ERR_ROUTE);
+ $mode = $action = false;
+ }
+ break;
+
+ }
+
+ break;
+
+ /*
+ currently accepting baseline imput after a * was received
+ */
+
+ case MODE_BL: // entering a baseline command
+ echo "was waiting for page number\n";
+ // if it's a number, continue entry
+ if (strpos('0123456789',$read) !== false) { // numeric
+ $cmd .= $read;
+ $client->send($read);
+ $blp++;
+ }
+ // if we hit a special numeric command, deal with it.
+ if ($cmd === '00') { // refresh page
+ $client->send(COFF);
+ $action = ACTION_RELOAD;
+ $cmd = '';
+ break;
+ }
+ if ($cmd === '09') { // reload page
+ $client->send(COFF);
+ $action = ACTION_GOTO;
+ $cmd = '';
+ break;
+
+ }
+ if ($cmd === '02') { // new for emulator
+ $client->send(COFF);
+ $action = ACTION_INFO;
+ $cmd = '';
+ break;
+ }
+ if (($cmd === '01')) { // new for emulator
+ $client->send(COFF);
+ $timewarp = !$timewarp;
+ sendBaseline($client, $blp,
+ ( $timewarp ? MSG_TIMEWARP_ON : MSG_TIMEWARP_OFF));
+ $cmd = '';
+ $action = $mode = false;
+ }
+ // another star aborts the command.
+ if ($read === "*") { // abort command or reset input field.
+ $action = false;
+ sendBaseline($client, $blp, '');
+ $cmd = '';
+
+ if ($prevmode == MODE_FIELD) {
+ $mode = $prevmode;
+ $prevmode = false;
+ $client->send(outputPosition($fields[$curfield]['x'],$fields[$curfield]['y']).CON);
+ $client->send(str_repeat(' ',$fields[$curfield]['length']));
+// tood reset stored entered text
+ $resetpsn = $curfield;
+ } else {
+ $mode = false;
+ }
+ break;
+ }
+ // user hit # to complete request
+ if ($read === '_') { // really the # key,
+ $client->send(COFF);
+ if ($cmd === '') { // nothing typed between * and #
+ $action = ACTION_BACKUP;
+ } else { // *# means go back
+ $page = $cmd;
+ $subpage = 'a';
+ $action = ACTION_GOTO;
+ }
+ $cmd = ''; // finished with this now
+ break;
+ }
+ break;
+
+
+ default:
+ echo "not sure what we were doing\n";
+ } // switch $mode
+ } // something in $read
+
+ /*
+ This section performs some action if it is deemed necessary
+ */
+ if ($action) {
+ echo "Performing action $action\n";
+ }
+ switch($action){
+ case ACTION_STAR:
+ echo " star command started\n";
+ sendBaseline($client, $blp, GREEN . '*', true);
+ $client->send(CON);
+ $action = false;
+ $mode = MODE_BL;
+ break;
+
+
+
+ case ACTION_SUBMITRF:
+ $action = false;
+ sendBaseline($client, $bpl, MSG_SENDORNOT);
+ $mode = MODE_SUBMITRF;
+ break;
+
+
+
+
+ case ACTION_BACKUP:
+ // do we have anywhere to go?
+ if (count($history) > 1) { // because current page should always be in there.
+ array_pop($history); // drop current page to reveal previous
+ }
+ list($page, $subpage) = end($history); // get new last entry,
+ echo "Backing up to $page$subpage\n";
+ // drop into
+ case ACTION_NEXT:
+ if ($action == ACTION_NEXT) {
+ $cursub = $subpage;
+ $subpage = chr(ord($subpage)+1);
+ }
+ case ACTION_GOTO:
+// $client->send(HOME . UP . GREEN . "Searching for page $page");
+// $blp = 20 + strlenv($page);
+ // look for requested page
+
+ try {
+ $fo = (new \App\Models\Frame)->fetch($page,$subpage);
+
+ } catch (ModelNotFoundException $e) {
+ Log::debug(sprintf('Frame: %s%s NOT found',$page,$subpage));
+ if ($action == ACTION_NEXT) {
+ $subpage = $cursub; // Put subpage back as it was
+ }
+
+ sendBaseline($client, $blp, ERR_PAGE);
+ $mode = $action = FALSE;
+ break;
+ }
+
+ dump(['m'=>__METHOD__,'service'=>$service['service_id'],'varient'=>$varient['varient_id'],'frame'=>$fo->framenum(),'type'=>$fo->type()]);
+
+ // validate if we have access top it
+ /* if (isset($m['access']) && $m['access'] == 'n') {
+ sendBaseline($client, $blp, ERR_PAGE);
+ $mode = $action = false;
+ break;
+ }
+ if (isset($m['cug']) && is_numeric($m['cug']) && $m['cug'] && !in_array($m['cug'],$usercugs)) {
+ sendBaseline($client, $blp, ERR_PRIVATE);
+ $mode = $action = false;
+ break;
+ }
+ */
+
+ // we have access...
+ if ($r['varient_id'] != $varient['varient_id']) {
+ if (empty($v['varient_date'])) {
+ sendBaseline($client, $blp, sprintf(MSG_TIMEWARP_TO, 'unknown date') );
+ } else {
+ sendBaseline($client, $blp, sprintf(MSG_TIMEWARP_TO,date('j f Y',strtotime($v['varient_date']))) );
+ }
+ $varient = array_merge($varient, array_intersect_key($r, $varient));
+ }
+ //var_dump(['B','r'=>$r,'m'=>$m]);
+ //$pagedata = array_merge($r, $m);
+ //$varient = $v;
+ $curpage = $page;
+ $cursub = $subpage;
+ $cufield = 0;
+ $curfp = 0;
+ //$pageflags = $db->getFrameTypeFlags($pagedata['type']); // method missing.
+ $pageflags = [];
+
+ if ($action == ACTION_GOTO || $action == ACTION_NEXT) { // only if new location, not going backwards
+ $history[] = array($page,$subpage);
+ }
+
+ // drop into
+ case ACTION_RELOAD:
+ //
+ /* if ($pageflags['clear']) {
+ $output = CLS;
+ $blp = 0;
+ } else {
+ $output = HOME;
+ }
+ */
+// print_r($pageflags); print_r($pagedata);
+
+ switch($fo->type()){
+ default:
+ case 'i': // standard frame
+ if ($timewarp && 1 < count(
+ $alts = $db->getAlternateFrames($service['service_id'],$varient['varient_id'],$curpage,$cursub)
+ )) {
+ $msg = MSG_TIMEWARP;
+ } else {
+ $msg = '';
+ }
+
+ $output = getOutputx($curpage, $cursub, [], $pageflags, $msg);
+ //var_dump(['output'=>$output,'curpage'=>$curpage,'cursub'=>$cursub,'pagedata'=>$pagedata,'pageflag'=>$pageflags,'m'=>$msg]);
+ $blp = strlenv($msg);
+ $client->send($output);
+ $mode = $action = false;
+ break;
+
+ case 'a': // active frame. Prestel uses this for Response Framea.
+
+ /*
+ if ($timewarp && 1 < count(
+ $alts = $db->getAlternateFrames($service['service_id'],$varient['varient_id'],$curpage,$cursub)
+ )) {
+ $msg = MSG_TIMEWARP;
+ } else {
+ $msg = '';
+ }
+ */
+
+ // this is a glorious hack to fix three out of 30,000 pages but might
+ // break lots more.
+ //$pagedata = str_replace(chr(12),chr(27),$pagedata);
+
+ // holds data entered by user.
+ $fielddata = array();
+
+ $fields = $fo->fields;
+ $msg = '?';
+ $output = getOutputx($curpage, $cursub, [], $pageflags, $msg, $user, $fields);
+ $blp = strlenv($msg);
+ $client->send($output);
+
+ if ($fields->count()) {
+ // dump($fields,count($fields));
+ // need t skip to first field that is..
+ // of a field type that is editable
+ // or finish.
+ $curfield = FALSE;
+
+ for ($i = 0; $i < count($fields); $i++) {
+ //dump($this->fieldoptions,$i,isset($this->fieldoptions[$fields[$i]['type']]));
+
+ if (isset($this->fieldoptions[$fields[$i]['type']]) &&
+ $this->fieldoptions[$fields[$i]['type']]['edit']) {
+ $curfield = $i;
+ break;
+ }
+ }
+
+ $resetpsn = $curfield;
+
+ if ($curfield !== false) {
+ $mode = MODE_FIELD;
+
+ } else {
+ // there were no editable fields.
+ $mode = MODE_COMPLETE;
+ }
+
+ $curfp = 0;
+
+ //dump(['curfield'=>$curfield,'mode'=>$mode]);
+ }
+
+ break;
+
+ case 't': // terminate
+ $output = getOutputx($curpage, $cursub, [], $pageflags);
+ $client->send($output);
+ $action = ACTION_TERMINATE;
+ break;
+
+ } // switch
+
+
+ break;
+
+
+
+
+ case ACTION_INFO: // special emulator command
+ $mode = false;
+ $cmd='';
+ $action = false;
+
+ $output = outputPosition(0,0) . WHITE . NEWBG . RED . 'TIMEWARP INFO FOR Pg.' . BLUE . $curpage . $cursub . WHITE;
+ $output .= outputPosition(0,1) . WHITE . NEWBG . BLUE . 'Service : ' . substr($service['service_name'] . str_repeat(' ',27),0,27) ;
+ $output .= outputPosition(0,2) . WHITE . NEWBG . BLUE . 'Varient : ' . substr($varient['varient_name'] . str_repeat(' ',27),0,27) ;
+ $output .= outputPosition(0,3) . WHITE . NEWBG . BLUE . 'Dated : ' . substr(date('j F Y',strtotime($varient['varient_date'])) . str_repeat(' ',27),0,27);
+
+ $alts = $db->getAlternateFrames($service['service_id'],$varient['varient_id'],$curpage,$cursub);
+ if (count($alts) > 1) {
+ $n = 1;
+ $output .= outputPosition(0,4) . WHITE . NEWBG . RED . 'ALTERNATIVE VERSIONS:' . str_repeat(' ',16);
+ $y = 5;
+ foreach ($alts as $ss){
+// if (is_numeric($ss['varient_date'])) {
+ $date = date('d M Y', strtotime($ss['varient_date']));
+// } else {
+// $date = 'unknown';
+// }
+ $line = WHITE . NEWBG;
+ if ($timewarp) {
+ $line .= RED . $n;
+ }
+ $line .= BLUE . $date . ' ' . $ss['varient_name'];
+
+
+ $output .= outputPosition(0,$y) . $line . str_repeat(' ',40-strlenv($line));
+ $y++;
+ $n++;
+
+ }
+ if ($timewarp) {
+ $mode = MODE_WARPTO;
+ }
+ }
+ $client->send($output);
+
+ break;
+
+ default:
+ ;
+ } // switch $action
+
+ if ($resetpsn !== false && isset($fields[$resetpsn])) {
+ $client->send(outputPosition($fields[$resetpsn]['x'],$fields[$resetpsn]['y']).CON);
+ $resetpsn = false;
+ }
+
+
+ if( $read === null || socket_last_error()) {
+ printf( "[%s] Disconnected\n", $client->getaddress() );
+ return false;
+ }
+ }
+
+ $client->close();
+ printf( "[%s] Disconnected\n", $client->getaddress() );
+ }
+}
+
+ function strlenv($text){
+ return strlen($text) - substr_count($text, ESC);
+ }
+
+ function sendBaseline($client, &$blp, $text, $reposition = false){
+ $client->send(HOME . UP . $text .
+ ( $blp > strlenv($text) ? str_repeat(' ',$blp-strlenv($text)) .
+ ( $reposition ? HOME . UP . str_repeat(RIGHT, strlenv($text)) : '' )
+ : '')
+ );
+ $blp = strlenv($text);
+ return;
+ }
+
+ function outputPosition($x,$y){
+
+ if ($y < 12) {
+ if ($x < 21) {
+ return HOME . str_repeat(DOWN, $y) . str_repeat(RIGHT, $x);
+ } else {
+ return HOME . str_repeat(DOWN, $y+1) . str_repeat(LEFT, 40-$x);
+ }
+ } else {
+ if ($x < 21) {
+ return HOME . str_repeat(UP, 24-$y) . str_repeat(RIGHT, $x);
+ } else {
+ return HOME . str_repeat(UP, 24-$y) . str_repeat(LEFT, 40-$x);
+ }
+
+ }
+ }
+
+ /*
+
+ return a screen output ... $msg sent on baseline just after the cls.
+ remember to update $blp manually after calling this.
+
+ */
+
+ function getOutputx($page, $subpage, $pagedata, $pageflags, $msg = '', $user = array(), &$fields = null, &$frame_content = null) {
+ global $blp;
+ global $fieldmap; // @todo this is not set outside of the class.
+
+ $price = isset($pagerecord['price']) ? $pagerecord['price'] : 0;
+
+ // get textual content.
+
+ $fo = (new \App\Models\Frame)->fetch($page,$subpage);
+ $text = (string)$fo;
+ //$text = $pagedata['frame_content'];
+
+
+
+// dump(['C'=>__METHOD__,'frame_content'=>$text,'msg'=>$output,'p'=>$page,'s'=>$subpage,'startline'=>$startline,'frame'=>$fo,'fields'=>$fo->fields($startline)]);
+
+ return (string)$fo;
+ }
\ No newline at end of file
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
new file mode 100644
index 0000000..a8c5158
--- /dev/null
+++ b/app/Console/Kernel.php
@@ -0,0 +1,42 @@
+command('inspire')
+ // ->hourly();
+ }
+
+ /**
+ * Register the commands for the application.
+ *
+ * @return void
+ */
+ protected function commands()
+ {
+ $this->load(__DIR__.'/Commands');
+
+ require base_path('routes/console.php');
+ }
+}
diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php
new file mode 100644
index 0000000..043cad6
--- /dev/null
+++ b/app/Exceptions/Handler.php
@@ -0,0 +1,51 @@
+where('frame_id',$page)->where('subframe_id',$frame)->firstOrFail());
+ }
+
+ /**
+ * Return the frame cost
+ *
+ * @return int
+ */
+ public function getCostAttribute()
+ {
+ // @todo NOT in DB
+ return rand(0,999);
+ }
+
+ public function hasFlag(string $flag)
+ {
+ // @todo When flags is in the DB update this.
+ return isset($this->flags) ? in_array($flag,$this->flags,FALSE) : FALSE;
+ }
+
+ /**
+ * Frame Types
+ */
+ public function type()
+ {
+ // @todo in DB
+ return isset($this->frametype) ? $this->frametype : 'i';
+ }
+}
\ No newline at end of file
diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php
new file mode 100644
index 0000000..35471f6
--- /dev/null
+++ b/app/Providers/AppServiceProvider.php
@@ -0,0 +1,28 @@
+ 'App\Policies\ModelPolicy',
+ ];
+
+ /**
+ * Register any authentication / authorization services.
+ *
+ * @return void
+ */
+ public function boot()
+ {
+ $this->registerPolicies();
+
+ //
+ }
+}
diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php
new file mode 100644
index 0000000..352cce4
--- /dev/null
+++ b/app/Providers/BroadcastServiceProvider.php
@@ -0,0 +1,21 @@
+ [
+ SendEmailVerificationNotification::class,
+ ],
+ ];
+
+ /**
+ * Register any events for your application.
+ *
+ * @return void
+ */
+ public function boot()
+ {
+ parent::boot();
+
+ //
+ }
+}
diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php
new file mode 100644
index 0000000..5ea48d3
--- /dev/null
+++ b/app/Providers/RouteServiceProvider.php
@@ -0,0 +1,73 @@
+mapApiRoutes();
+
+ $this->mapWebRoutes();
+
+ //
+ }
+
+ /**
+ * Define the "web" routes for the application.
+ *
+ * These routes all receive session state, CSRF protection, etc.
+ *
+ * @return void
+ */
+ protected function mapWebRoutes()
+ {
+ Route::middleware('web')
+ ->namespace($this->namespace)
+ ->group(base_path('routes/web.php'));
+ }
+
+ /**
+ * Define the "api" routes for the application.
+ *
+ * These routes are typically stateless.
+ *
+ * @return void
+ */
+ protected function mapApiRoutes()
+ {
+ Route::prefix('api')
+ ->middleware('api')
+ ->namespace($this->namespace)
+ ->group(base_path('routes/api.php'));
+ }
+}
diff --git a/artisan b/artisan
new file mode 100755
index 0000000..5c23e2e
--- /dev/null
+++ b/artisan
@@ -0,0 +1,53 @@
+#!/usr/bin/env php
+make(Illuminate\Contracts\Console\Kernel::class);
+
+$status = $kernel->handle(
+ $input = new Symfony\Component\Console\Input\ArgvInput,
+ new Symfony\Component\Console\Output\ConsoleOutput
+);
+
+/*
+|--------------------------------------------------------------------------
+| Shutdown The Application
+|--------------------------------------------------------------------------
+|
+| Once Artisan has finished running, we will fire off the shutdown events
+| so that any final work may be done by the application before we shut
+| down the process. This is the last thing to happen to the request.
+|
+*/
+
+$kernel->terminate($input, $status);
+
+exit($status);
diff --git a/bootstrap/app.php b/bootstrap/app.php
new file mode 100644
index 0000000..037e17d
--- /dev/null
+++ b/bootstrap/app.php
@@ -0,0 +1,55 @@
+singleton(
+ Illuminate\Contracts\Http\Kernel::class,
+ App\Http\Kernel::class
+);
+
+$app->singleton(
+ Illuminate\Contracts\Console\Kernel::class,
+ App\Console\Kernel::class
+);
+
+$app->singleton(
+ Illuminate\Contracts\Debug\ExceptionHandler::class,
+ App\Exceptions\Handler::class
+);
+
+/*
+|--------------------------------------------------------------------------
+| Return The Application
+|--------------------------------------------------------------------------
+|
+| This script returns the application instance. The instance is given to
+| the calling script so we can separate the building of the instances
+| from the actual running of the application and sending responses.
+|
+*/
+
+return $app;
diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/bootstrap/cache/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..4adbc60
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,84 @@
+{
+ "name": "laravel/laravel",
+ "type": "project",
+ "description": "The Laravel Framework.",
+ "keywords": [
+ "framework",
+ "laravel"
+ ],
+ "license": "MIT",
+ "require": {
+ "php": "^7.1.3",
+ "fideloper/proxy": "^4.0",
+ "laravel/framework": "5.7.*",
+ "laravel/tinker": "^1.0",
+ "lukaszkujawa/php-multithreaded-socket-server": "0.0.*"
+ },
+ "require-dev": {
+ "beyondcode/laravel-dump-server": "^1.0",
+ "filp/whoops": "^2.0",
+ "fzaninotto/faker": "^1.4",
+ "mockery/mockery": "^1.0",
+ "nunomaduro/collision": "^2.0",
+ "phpunit/phpunit": "^7.0"
+ },
+ "config": {
+ "optimize-autoloader": true,
+ "preferred-install": "dist",
+ "sort-packages": true
+ },
+ "extra": {
+ "laravel": {
+ "dont-discover": []
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Sock\\": "vendor/lukaszkujawa/php-multithreaded-socket-server/sock/"
+ },
+ "psr-4": {
+ "App\\": "app/"
+ },
+ "files": [
+ "bootstrap/constants.php"
+ ],
+ "classmap": [
+ "database/seeds",
+ "database/factories"
+ ]
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Tests\\": "tests/"
+ }
+ },
+ "minimum-stability": "dev",
+ "prefer-stable": true,
+ "repositories": {
+ "sock": {
+ "type": "package",
+ "package": {
+ "name": "lukaszkujawa/php-multithreaded-socket-server",
+ "description": "Sag with fixed unitialized variables",
+ "version": "0.0.1",
+ "source": {
+ "url": "https://github.com/lukaszkujawa/php-multithreaded-socket-server",
+ "type": "git",
+ "reference": "master"
+ }
+ }
+ }
+ },
+ "scripts": {
+ "post-autoload-dump": [
+ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
+ "@php artisan package:discover --ansi"
+ ],
+ "post-root-package-install": [
+ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
+ ],
+ "post-create-project-cmd": [
+ "@php artisan key:generate --ansi"
+ ]
+ }
+}
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000..c33b929
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,4149 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
+ "This file is @generated automatically"
+ ],
+ "content-hash": "2bcfe8e78cb84d91841e72dec65770f9",
+ "packages": [
+ {
+ "name": "dnoegel/php-xdg-base-dir",
+ "version": "0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
+ "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/265b8593498b997dc2d31e75b89f053b5cc9621a",
+ "reference": "265b8593498b997dc2d31e75b89f053b5cc9621a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "@stable"
+ },
+ "type": "project",
+ "autoload": {
+ "psr-4": {
+ "XdgBaseDir\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "implementation of xdg base directory specification for php",
+ "time": "2014-10-24T07:27:01+00:00"
+ },
+ {
+ "name": "doctrine/inflector",
+ "version": "v1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/inflector.git",
+ "reference": "5527a48b7313d15261292c149e55e26eae771b0a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a",
+ "reference": "5527a48b7313d15261292c149e55e26eae771b0a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Jonathan Wage",
+ "email": "jonwage@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Common String Manipulations with regard to casing and singular/plural rules.",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "inflection",
+ "pluralize",
+ "singularize",
+ "string"
+ ],
+ "time": "2018-01-09T20:05:19+00:00"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "v1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c",
+ "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Doctrine\\Common\\Lexer\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
+ ],
+ "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.",
+ "homepage": "http://www.doctrine-project.org",
+ "keywords": [
+ "lexer",
+ "parser"
+ ],
+ "time": "2014-09-09T13:34:57+00:00"
+ },
+ {
+ "name": "dragonmantank/cron-expression",
+ "version": "v2.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/dragonmantank/cron-expression.git",
+ "reference": "92a2c3768d50e21a1f26a53cb795ce72806266c5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/92a2c3768d50e21a1f26a53cb795ce72806266c5",
+ "reference": "92a2c3768d50e21a1f26a53cb795ce72806266c5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~6.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Cron\\": "src/Cron/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Chris Tankersley",
+ "email": "chris@ctankersley.com",
+ "homepage": "https://github.com/dragonmantank"
+ }
+ ],
+ "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
+ "keywords": [
+ "cron",
+ "schedule"
+ ],
+ "time": "2018-06-06T03:12:17+00:00"
+ },
+ {
+ "name": "egulias/email-validator",
+ "version": "2.1.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/egulias/EmailValidator.git",
+ "reference": "0578b32b30b22de3e8664f797cf846fc9246f786"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0578b32b30b22de3e8664f797cf846fc9246f786",
+ "reference": "0578b32b30b22de3e8664f797cf846fc9246f786",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/lexer": "^1.0.1",
+ "php": ">= 5.5"
+ },
+ "require-dev": {
+ "dominicsayers/isemail": "dev-master",
+ "phpunit/phpunit": "^4.8.35||^5.7||^6.0",
+ "satooshi/php-coveralls": "^1.0.1"
+ },
+ "suggest": {
+ "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Egulias\\EmailValidator\\": "EmailValidator"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eduardo Gulias Davis"
+ }
+ ],
+ "description": "A library for validating emails against several RFCs",
+ "homepage": "https://github.com/egulias/EmailValidator",
+ "keywords": [
+ "email",
+ "emailvalidation",
+ "emailvalidator",
+ "validation",
+ "validator"
+ ],
+ "time": "2018-09-25T20:47:26+00:00"
+ },
+ {
+ "name": "erusev/parsedown",
+ "version": "1.7.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/erusev/parsedown.git",
+ "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1",
+ "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Parsedown": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Emanuil Rusev",
+ "email": "hello@erusev.com",
+ "homepage": "http://erusev.com"
+ }
+ ],
+ "description": "Parser for Markdown.",
+ "homepage": "http://parsedown.org",
+ "keywords": [
+ "markdown",
+ "parser"
+ ],
+ "time": "2018-03-08T01:11:30+00:00"
+ },
+ {
+ "name": "fideloper/proxy",
+ "version": "4.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/fideloper/TrustedProxy.git",
+ "reference": "cf8a0ca4b85659b9557e206c90110a6a4dba980a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/fideloper/TrustedProxy/zipball/cf8a0ca4b85659b9557e206c90110a6a4dba980a",
+ "reference": "cf8a0ca4b85659b9557e206c90110a6a4dba980a",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/contracts": "~5.0",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "illuminate/http": "~5.6",
+ "mockery/mockery": "~1.0",
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Fideloper\\Proxy\\TrustedProxyServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Fideloper\\Proxy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Fidao",
+ "email": "fideloper@gmail.com"
+ }
+ ],
+ "description": "Set trusted proxies for Laravel",
+ "keywords": [
+ "load balancing",
+ "proxy",
+ "trusted proxy"
+ ],
+ "time": "2018-02-07T20:20:57+00:00"
+ },
+ {
+ "name": "jakub-onderka/php-console-color",
+ "version": "v0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/JakubOnderka/PHP-Console-Color.git",
+ "reference": "d5deaecff52a0d61ccb613bb3804088da0307191"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191",
+ "reference": "d5deaecff52a0d61ccb613bb3804088da0307191",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "jakub-onderka/php-code-style": "1.0",
+ "jakub-onderka/php-parallel-lint": "1.0",
+ "jakub-onderka/php-var-dump-check": "0.*",
+ "phpunit/phpunit": "~4.3",
+ "squizlabs/php_codesniffer": "1.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "JakubOnderka\\PhpConsoleColor\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jakub Onderka",
+ "email": "jakub.onderka@gmail.com"
+ }
+ ],
+ "time": "2018-09-29T17:23:10+00:00"
+ },
+ {
+ "name": "jakub-onderka/php-console-highlighter",
+ "version": "v0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git",
+ "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547",
+ "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "jakub-onderka/php-console-color": "~0.2",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "jakub-onderka/php-code-style": "~1.0",
+ "jakub-onderka/php-parallel-lint": "~1.0",
+ "jakub-onderka/php-var-dump-check": "~0.1",
+ "phpunit/phpunit": "~4.0",
+ "squizlabs/php_codesniffer": "~1.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "JakubOnderka\\PhpConsoleHighlighter\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jakub Onderka",
+ "email": "acci@acci.cz",
+ "homepage": "http://www.acci.cz/"
+ }
+ ],
+ "description": "Highlight PHP code in terminal",
+ "time": "2018-09-29T18:48:56+00:00"
+ },
+ {
+ "name": "laravel/framework",
+ "version": "v5.7.15",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/framework.git",
+ "reference": "e0dbd6ab143286d81bedf2b34f8820f3d49ea15f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/e0dbd6ab143286d81bedf2b34f8820f3d49ea15f",
+ "reference": "e0dbd6ab143286d81bedf2b34f8820f3d49ea15f",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/inflector": "^1.1",
+ "dragonmantank/cron-expression": "^2.0",
+ "erusev/parsedown": "^1.7",
+ "ext-mbstring": "*",
+ "ext-openssl": "*",
+ "league/flysystem": "^1.0.8",
+ "monolog/monolog": "^1.12",
+ "nesbot/carbon": "^1.26.3",
+ "opis/closure": "^3.1",
+ "php": "^7.1.3",
+ "psr/container": "^1.0",
+ "psr/simple-cache": "^1.0",
+ "ramsey/uuid": "^3.7",
+ "swiftmailer/swiftmailer": "^6.0",
+ "symfony/console": "^4.1",
+ "symfony/debug": "^4.1",
+ "symfony/finder": "^4.1",
+ "symfony/http-foundation": "^4.1",
+ "symfony/http-kernel": "^4.1",
+ "symfony/process": "^4.1",
+ "symfony/routing": "^4.1",
+ "symfony/var-dumper": "^4.1",
+ "tijsverkoyen/css-to-inline-styles": "^2.2.1",
+ "vlucas/phpdotenv": "^2.2"
+ },
+ "conflict": {
+ "tightenco/collect": "<5.5.33"
+ },
+ "replace": {
+ "illuminate/auth": "self.version",
+ "illuminate/broadcasting": "self.version",
+ "illuminate/bus": "self.version",
+ "illuminate/cache": "self.version",
+ "illuminate/config": "self.version",
+ "illuminate/console": "self.version",
+ "illuminate/container": "self.version",
+ "illuminate/contracts": "self.version",
+ "illuminate/cookie": "self.version",
+ "illuminate/database": "self.version",
+ "illuminate/encryption": "self.version",
+ "illuminate/events": "self.version",
+ "illuminate/filesystem": "self.version",
+ "illuminate/hashing": "self.version",
+ "illuminate/http": "self.version",
+ "illuminate/log": "self.version",
+ "illuminate/mail": "self.version",
+ "illuminate/notifications": "self.version",
+ "illuminate/pagination": "self.version",
+ "illuminate/pipeline": "self.version",
+ "illuminate/queue": "self.version",
+ "illuminate/redis": "self.version",
+ "illuminate/routing": "self.version",
+ "illuminate/session": "self.version",
+ "illuminate/support": "self.version",
+ "illuminate/translation": "self.version",
+ "illuminate/validation": "self.version",
+ "illuminate/view": "self.version"
+ },
+ "require-dev": {
+ "aws/aws-sdk-php": "^3.0",
+ "doctrine/dbal": "^2.6",
+ "filp/whoops": "^2.1.4",
+ "guzzlehttp/guzzle": "^6.3",
+ "league/flysystem-cached-adapter": "^1.0",
+ "mockery/mockery": "^1.0",
+ "moontoast/math": "^1.1",
+ "orchestra/testbench-core": "3.7.*",
+ "pda/pheanstalk": "^3.0",
+ "phpunit/phpunit": "^7.0",
+ "predis/predis": "^1.1.1",
+ "symfony/css-selector": "^4.1",
+ "symfony/dom-crawler": "^4.1",
+ "true/punycode": "^2.1"
+ },
+ "suggest": {
+ "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).",
+ "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).",
+ "ext-pcntl": "Required to use all features of the queue worker.",
+ "ext-posix": "Required to use all features of the queue worker.",
+ "filp/whoops": "Required for friendly error pages in development (^2.1.4).",
+ "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).",
+ "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).",
+ "laravel/tinker": "Required to use the tinker console command (^1.0).",
+ "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).",
+ "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).",
+ "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).",
+ "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).",
+ "moontoast/math": "Required to use ordered UUIDs (^1.1).",
+ "nexmo/client": "Required to use the Nexmo transport (^1.0).",
+ "pda/pheanstalk": "Required to use the beanstalk queue driver (^3.0).",
+ "predis/predis": "Required to use the redis cache and queue drivers (^1.0).",
+ "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).",
+ "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.1).",
+ "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.1).",
+ "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.0)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.7-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Illuminate/Foundation/helpers.php",
+ "src/Illuminate/Support/helpers.php"
+ ],
+ "psr-4": {
+ "Illuminate\\": "src/Illuminate/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "The Laravel Framework.",
+ "homepage": "https://laravel.com",
+ "keywords": [
+ "framework",
+ "laravel"
+ ],
+ "time": "2018-11-26T14:10:57+00:00"
+ },
+ {
+ "name": "laravel/tinker",
+ "version": "v1.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/laravel/tinker.git",
+ "reference": "cafbf598a90acde68985660e79b2b03c5609a405"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/laravel/tinker/zipball/cafbf598a90acde68985660e79b2b03c5609a405",
+ "reference": "cafbf598a90acde68985660e79b2b03c5609a405",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/console": "~5.1",
+ "illuminate/contracts": "~5.1",
+ "illuminate/support": "~5.1",
+ "php": ">=5.5.9",
+ "psy/psysh": "0.7.*|0.8.*|0.9.*",
+ "symfony/var-dumper": "~3.0|~4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.0|~5.0"
+ },
+ "suggest": {
+ "illuminate/database": "The Illuminate Database package (~5.1)."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ },
+ "laravel": {
+ "providers": [
+ "Laravel\\Tinker\\TinkerServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\Tinker\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ }
+ ],
+ "description": "Powerful REPL for the Laravel framework.",
+ "keywords": [
+ "REPL",
+ "Tinker",
+ "laravel",
+ "psysh"
+ ],
+ "time": "2018-10-12T19:39:35+00:00"
+ },
+ {
+ "name": "league/flysystem",
+ "version": "1.0.49",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem.git",
+ "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a63cc83d8a931b271be45148fa39ba7156782ffd",
+ "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd",
+ "shasum": ""
+ },
+ "require": {
+ "ext-fileinfo": "*",
+ "php": ">=5.5.9"
+ },
+ "conflict": {
+ "league/flysystem-sftp": "<1.0.6"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "^3.4",
+ "phpunit/phpunit": "^5.7.10"
+ },
+ "suggest": {
+ "ext-fileinfo": "Required for MimeType",
+ "ext-ftp": "Allows you to use FTP server storage",
+ "ext-openssl": "Allows you to use FTPS server storage",
+ "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2",
+ "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3",
+ "league/flysystem-azure": "Allows you to use Windows Azure Blob storage",
+ "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching",
+ "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem",
+ "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files",
+ "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib",
+ "league/flysystem-webdav": "Allows you to use WebDAV storage",
+ "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter",
+ "spatie/flysystem-dropbox": "Allows you to use Dropbox storage",
+ "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frenky.net"
+ }
+ ],
+ "description": "Filesystem abstraction: Many filesystems, one API.",
+ "keywords": [
+ "Cloud Files",
+ "WebDAV",
+ "abstraction",
+ "aws",
+ "cloud",
+ "copy.com",
+ "dropbox",
+ "file systems",
+ "files",
+ "filesystem",
+ "filesystems",
+ "ftp",
+ "rackspace",
+ "remote",
+ "s3",
+ "sftp",
+ "storage"
+ ],
+ "time": "2018-11-23T23:41:29+00:00"
+ },
+ {
+ "name": "lukaszkujawa/php-multithreaded-socket-server",
+ "version": "0.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/lukaszkujawa/php-multithreaded-socket-server",
+ "reference": "master"
+ },
+ "type": "library",
+ "description": "Sag with fixed unitialized variables"
+ },
+ {
+ "name": "monolog/monolog",
+ "version": "1.24.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/monolog.git",
+ "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
+ "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0",
+ "psr/log": "~1.0"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0.0"
+ },
+ "require-dev": {
+ "aws/aws-sdk-php": "^2.4.9 || ^3.0",
+ "doctrine/couchdb": "~1.0@dev",
+ "graylog2/gelf-php": "~1.0",
+ "jakub-onderka/php-parallel-lint": "0.9",
+ "php-amqplib/php-amqplib": "~2.4",
+ "php-console/php-console": "^3.1.3",
+ "phpunit/phpunit": "~4.5",
+ "phpunit/phpunit-mock-objects": "2.3.0",
+ "ruflin/elastica": ">=0.90 <3.0",
+ "sentry/sentry": "^0.13",
+ "swiftmailer/swiftmailer": "^5.3|^6.0"
+ },
+ "suggest": {
+ "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
+ "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
+ "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
+ "ext-mongo": "Allow sending log messages to a MongoDB server",
+ "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
+ "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
+ "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
+ "php-console/php-console": "Allow sending log messages to Google Chrome",
+ "rollbar/rollbar": "Allow sending log messages to Rollbar",
+ "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
+ "sentry/sentry": "Allow sending log messages to a Sentry server"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Monolog\\": "src/Monolog"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
+ "homepage": "http://github.com/Seldaek/monolog",
+ "keywords": [
+ "log",
+ "logging",
+ "psr-3"
+ ],
+ "time": "2018-11-05T09:00:11+00:00"
+ },
+ {
+ "name": "nesbot/carbon",
+ "version": "1.36.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/briannesbitt/Carbon.git",
+ "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/63da8cdf89d7a5efe43aabc794365f6e7b7b8983",
+ "reference": "63da8cdf89d7a5efe43aabc794365f6e7b7b8983",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9",
+ "symfony/translation": "~2.6 || ~3.0 || ~4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7"
+ },
+ "suggest": {
+ "friendsofphp/php-cs-fixer": "Needed for the `composer phpcs` command. Allow to automatically fix code style.",
+ "phpstan/phpstan": "Needed for the `composer phpstan` command. Allow to detect potential errors."
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Carbon\\Laravel\\ServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Brian Nesbitt",
+ "email": "brian@nesbot.com",
+ "homepage": "http://nesbot.com"
+ }
+ ],
+ "description": "A simple API extension for DateTime.",
+ "homepage": "http://carbon.nesbot.com",
+ "keywords": [
+ "date",
+ "datetime",
+ "time"
+ ],
+ "time": "2018-11-22T18:23:02+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v4.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "d0230c5c77a7e3cfa69446febf340978540958c0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/d0230c5c77a7e3cfa69446febf340978540958c0",
+ "reference": "d0230c5c77a7e3cfa69446febf340978540958c0",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.5 || ^7.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "time": "2018-10-10T09:24:14+00:00"
+ },
+ {
+ "name": "opis/closure",
+ "version": "3.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/opis/closure.git",
+ "reference": "d3209e46ad6c69a969b705df0738fd0dbe26ef9e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/opis/closure/zipball/d3209e46ad6c69a969b705df0738fd0dbe26ef9e",
+ "reference": "d3209e46ad6c69a969b705df0738fd0dbe26ef9e",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.4 || ^7.0"
+ },
+ "require-dev": {
+ "jeremeamia/superclosure": "^2.0",
+ "phpunit/phpunit": "^4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Opis\\Closure\\": "src/"
+ },
+ "files": [
+ "functions.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marius Sarca",
+ "email": "marius.sarca@gmail.com"
+ },
+ {
+ "name": "Sorin Sarca",
+ "email": "sarca_sorin@hotmail.com"
+ }
+ ],
+ "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.",
+ "homepage": "https://opis.io/closure",
+ "keywords": [
+ "anonymous functions",
+ "closure",
+ "function",
+ "serializable",
+ "serialization",
+ "serialize"
+ ],
+ "time": "2018-10-02T13:36:53+00:00"
+ },
+ {
+ "name": "paragonie/random_compat",
+ "version": "v9.99.99",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/paragonie/random_compat.git",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*|5.*",
+ "vimeo/psalm": "^1"
+ },
+ "suggest": {
+ "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com"
+ }
+ ],
+ "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
+ "keywords": [
+ "csprng",
+ "polyfill",
+ "pseudorandom",
+ "random"
+ ],
+ "time": "2018-07-02T15:55:56+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "time": "2017-02-14T16:28:37+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+ "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "time": "2018-11-20T15:27:04+00:00"
+ },
+ {
+ "name": "psr/simple-cache",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/simple-cache.git",
+ "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+ "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\SimpleCache\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interfaces for simple caching",
+ "keywords": [
+ "cache",
+ "caching",
+ "psr",
+ "psr-16",
+ "simple-cache"
+ ],
+ "time": "2017-10-23T01:57:42+00:00"
+ },
+ {
+ "name": "psy/psysh",
+ "version": "v0.9.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/bobthecow/psysh.git",
+ "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
+ "reference": "9aaf29575bb8293206bb0420c1e1c87ff2ffa94e",
+ "shasum": ""
+ },
+ "require": {
+ "dnoegel/php-xdg-base-dir": "0.1",
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*",
+ "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0",
+ "php": ">=5.4.0",
+ "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0",
+ "symfony/var-dumper": "~2.7|~3.0|~4.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.2",
+ "hoa/console": "~2.15|~3.16",
+ "phpunit/phpunit": "~4.8.35|~5.0|~6.0|~7.0"
+ },
+ "suggest": {
+ "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
+ "ext-pdo-sqlite": "The doc command requires SQLite to work.",
+ "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.",
+ "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.",
+ "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit."
+ },
+ "bin": [
+ "bin/psysh"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-develop": "0.9.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Psy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Justin Hileman",
+ "email": "justin@justinhileman.info",
+ "homepage": "http://justinhileman.com"
+ }
+ ],
+ "description": "An interactive shell for modern PHP.",
+ "homepage": "http://psysh.org",
+ "keywords": [
+ "REPL",
+ "console",
+ "interactive",
+ "shell"
+ ],
+ "time": "2018-10-13T15:16:03+00:00"
+ },
+ {
+ "name": "ramsey/uuid",
+ "version": "3.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ramsey/uuid.git",
+ "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3",
+ "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3",
+ "shasum": ""
+ },
+ "require": {
+ "paragonie/random_compat": "^1.0|^2.0|9.99.99",
+ "php": "^5.4 || ^7.0",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "replace": {
+ "rhumsaa/uuid": "self.version"
+ },
+ "require-dev": {
+ "codeception/aspect-mock": "^1.0 | ~2.0.0",
+ "doctrine/annotations": "~1.2.0",
+ "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0",
+ "ircmaxell/random-lib": "^1.1",
+ "jakub-onderka/php-parallel-lint": "^0.9.0",
+ "mockery/mockery": "^0.9.9",
+ "moontoast/math": "^1.1",
+ "php-mock/php-mock-phpunit": "^0.3|^1.1",
+ "phpunit/phpunit": "^4.7|^5.0|^6.5",
+ "squizlabs/php_codesniffer": "^2.3"
+ },
+ "suggest": {
+ "ext-ctype": "Provides support for PHP Ctype functions",
+ "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator",
+ "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator",
+ "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
+ "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).",
+ "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid",
+ "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Ramsey\\Uuid\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marijn Huizendveld",
+ "email": "marijn.huizendveld@gmail.com"
+ },
+ {
+ "name": "Thibaud Fabre",
+ "email": "thibaud@aztech.io"
+ },
+ {
+ "name": "Ben Ramsey",
+ "email": "ben@benramsey.com",
+ "homepage": "https://benramsey.com"
+ }
+ ],
+ "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).",
+ "homepage": "https://github.com/ramsey/uuid",
+ "keywords": [
+ "guid",
+ "identifier",
+ "uuid"
+ ],
+ "time": "2018-07-19T23:38:55+00:00"
+ },
+ {
+ "name": "swiftmailer/swiftmailer",
+ "version": "v6.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/swiftmailer/swiftmailer.git",
+ "reference": "8ddcb66ac10c392d3beb54829eef8ac1438595f4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8ddcb66ac10c392d3beb54829eef8ac1438595f4",
+ "reference": "8ddcb66ac10c392d3beb54829eef8ac1438595f4",
+ "shasum": ""
+ },
+ "require": {
+ "egulias/email-validator": "~2.0",
+ "php": ">=7.0.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "~0.9.1",
+ "symfony/phpunit-bridge": "~3.3@dev"
+ },
+ "suggest": {
+ "ext-intl": "Needed to support internationalized email addresses",
+ "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "6.1-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "lib/swift_required.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Chris Corbyn"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ }
+ ],
+ "description": "Swiftmailer, free feature-rich PHP mailer",
+ "homepage": "https://swiftmailer.symfony.com",
+ "keywords": [
+ "email",
+ "mail",
+ "mailer"
+ ],
+ "time": "2018-09-11T07:12:52+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v4.1.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "c74f4d1988dfcd8760273e53551694da32b056d0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/c74f4d1988dfcd8760273e53551694da32b056d0",
+ "reference": "c74f4d1988dfcd8760273e53551694da32b056d0",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1.3",
+ "symfony/polyfill-mbstring": "~1.0"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<3.4",
+ "symfony/process": "<3.3"
+ },
+ "require-dev": {
+ "psr/log": "~1.0",
+ "symfony/config": "~3.4|~4.0",
+ "symfony/dependency-injection": "~3.4|~4.0",
+ "symfony/event-dispatcher": "~3.4|~4.0",
+ "symfony/lock": "~3.4|~4.0",
+ "symfony/process": "~3.4|~4.0"
+ },
+ "suggest": {
+ "psr/log-implementation": "For using the console logger",
+ "symfony/event-dispatcher": "",
+ "symfony/lock": "",
+ "symfony/process": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Console Component",
+ "homepage": "https://symfony.com",
+ "time": "2018-11-26T14:00:40+00:00"
+ },
+ {
+ "name": "symfony/css-selector",
+ "version": "v4.1.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/css-selector.git",
+ "reference": "9e4dc57949853315561f0cd5eb84d0707465502a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/9e4dc57949853315561f0cd5eb84d0707465502a",
+ "reference": "9e4dc57949853315561f0cd5eb84d0707465502a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\CssSelector\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jean-François Simon",
+ "email": "jeanfrancois.simon@sensiolabs.com"
+ },
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony CssSelector Component",
+ "homepage": "https://symfony.com",
+ "time": "2018-11-11T19:51:29+00:00"
+ },
+ {
+ "name": "symfony/debug",
+ "version": "v4.1.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/debug.git",
+ "reference": "f9eea0cff99d14f97d69b24b17164098ece3fd32"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/f9eea0cff99d14f97d69b24b17164098ece3fd32",
+ "reference": "f9eea0cff99d14f97d69b24b17164098ece3fd32",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1.3",
+ "psr/log": "~1.0"
+ },
+ "conflict": {
+ "symfony/http-kernel": "<3.4"
+ },
+ "require-dev": {
+ "symfony/http-kernel": "~3.4|~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Debug\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Debug Component",
+ "homepage": "https://symfony.com",
+ "time": "2018-11-11T19:51:29+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher",
+ "version": "v4.1.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "8b93ce06506d58485893e2da366767dcc5390862"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8b93ce06506d58485893e2da366767dcc5390862",
+ "reference": "8b93ce06506d58485893e2da366767dcc5390862",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1.3"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<3.4"
+ },
+ "require-dev": {
+ "psr/log": "~1.0",
+ "symfony/config": "~3.4|~4.0",
+ "symfony/dependency-injection": "~3.4|~4.0",
+ "symfony/expression-language": "~3.4|~4.0",
+ "symfony/stopwatch": "~3.4|~4.0"
+ },
+ "suggest": {
+ "symfony/dependency-injection": "",
+ "symfony/http-kernel": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\EventDispatcher\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony EventDispatcher Component",
+ "homepage": "https://symfony.com",
+ "time": "2018-11-26T10:26:29+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v4.1.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "68fbdcafe915db67adb13fddaec4532e684f6689"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/68fbdcafe915db67adb13fddaec4532e684f6689",
+ "reference": "68fbdcafe915db67adb13fddaec4532e684f6689",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Finder Component",
+ "homepage": "https://symfony.com",
+ "time": "2018-11-11T19:51:29+00:00"
+ },
+ {
+ "name": "symfony/http-foundation",
+ "version": "v4.1.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-foundation.git",
+ "reference": "26062b9527b6797fc6239ed698c9c0a3c5e891e0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/26062b9527b6797fc6239ed698c9c0a3c5e891e0",
+ "reference": "26062b9527b6797fc6239ed698c9c0a3c5e891e0",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1.3",
+ "symfony/polyfill-mbstring": "~1.1"
+ },
+ "require-dev": {
+ "predis/predis": "~1.0",
+ "symfony/expression-language": "~3.4|~4.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpFoundation\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony HttpFoundation Component",
+ "homepage": "https://symfony.com",
+ "time": "2018-11-26T10:26:29+00:00"
+ },
+ {
+ "name": "symfony/http-kernel",
+ "version": "v4.1.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-kernel.git",
+ "reference": "2be29c72276ba4ef5c5488de666f9f12aa768b44"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2be29c72276ba4ef5c5488de666f9f12aa768b44",
+ "reference": "2be29c72276ba4ef5c5488de666f9f12aa768b44",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1.3",
+ "psr/log": "~1.0",
+ "symfony/debug": "~3.4|~4.0",
+ "symfony/event-dispatcher": "~4.1",
+ "symfony/http-foundation": "^4.1.1",
+ "symfony/polyfill-ctype": "~1.8"
+ },
+ "conflict": {
+ "symfony/config": "<3.4",
+ "symfony/dependency-injection": "<4.1",
+ "symfony/var-dumper": "<4.1.1",
+ "twig/twig": "<1.34|<2.4,>=2"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0"
+ },
+ "require-dev": {
+ "psr/cache": "~1.0",
+ "symfony/browser-kit": "~3.4|~4.0",
+ "symfony/config": "~3.4|~4.0",
+ "symfony/console": "~3.4|~4.0",
+ "symfony/css-selector": "~3.4|~4.0",
+ "symfony/dependency-injection": "^4.1",
+ "symfony/dom-crawler": "~3.4|~4.0",
+ "symfony/expression-language": "~3.4|~4.0",
+ "symfony/finder": "~3.4|~4.0",
+ "symfony/process": "~3.4|~4.0",
+ "symfony/routing": "~3.4|~4.0",
+ "symfony/stopwatch": "~3.4|~4.0",
+ "symfony/templating": "~3.4|~4.0",
+ "symfony/translation": "~3.4|~4.0",
+ "symfony/var-dumper": "^4.1.1"
+ },
+ "suggest": {
+ "symfony/browser-kit": "",
+ "symfony/config": "",
+ "symfony/console": "",
+ "symfony/dependency-injection": "",
+ "symfony/var-dumper": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpKernel\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony HttpKernel Component",
+ "homepage": "https://symfony.com",
+ "time": "2018-11-26T14:52:15+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
+ "reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ },
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "time": "2018-08-06T14:22:27+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "c79c051f5b3a46be09205c73b80b346e4153e494"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494",
+ "reference": "c79c051f5b3a46be09205c73b80b346e4153e494",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2018-09-21T13:07:52+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php72",
+ "version": "v1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php72.git",
+ "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9050816e2ca34a8e916c3a0ae8b9c2fccf68b631",
+ "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php72\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2018-09-21T13:07:52+00:00"
+ },
+ {
+ "name": "symfony/process",
+ "version": "v4.1.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/process.git",
+ "reference": "471f6e24172366a97365baaae588ddaafbba9b20"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/process/zipball/471f6e24172366a97365baaae588ddaafbba9b20",
+ "reference": "471f6e24172366a97365baaae588ddaafbba9b20",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Process\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Process Component",
+ "homepage": "https://symfony.com",
+ "time": "2018-11-20T16:14:00+00:00"
+ },
+ {
+ "name": "symfony/routing",
+ "version": "v4.1.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/routing.git",
+ "reference": "eebc037d45c253af2349c5b25a2d0531a732efdc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/eebc037d45c253af2349c5b25a2d0531a732efdc",
+ "reference": "eebc037d45c253af2349c5b25a2d0531a732efdc",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1.3"
+ },
+ "conflict": {
+ "symfony/config": "<3.4",
+ "symfony/dependency-injection": "<3.4",
+ "symfony/yaml": "<3.4"
+ },
+ "require-dev": {
+ "doctrine/annotations": "~1.0",
+ "psr/log": "~1.0",
+ "symfony/config": "~3.4|~4.0",
+ "symfony/dependency-injection": "~3.4|~4.0",
+ "symfony/expression-language": "~3.4|~4.0",
+ "symfony/http-foundation": "~3.4|~4.0",
+ "symfony/yaml": "~3.4|~4.0"
+ },
+ "suggest": {
+ "doctrine/annotations": "For using the annotation loader",
+ "symfony/config": "For using the all-in-one router or any loader",
+ "symfony/dependency-injection": "For loading routes from a service",
+ "symfony/expression-language": "For using expression matching",
+ "symfony/http-foundation": "For using a Symfony Request object",
+ "symfony/yaml": "For using the YAML loader"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Routing\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Routing Component",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "router",
+ "routing",
+ "uri",
+ "url"
+ ],
+ "time": "2018-11-26T10:24:14+00:00"
+ },
+ {
+ "name": "symfony/translation",
+ "version": "v4.1.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/translation.git",
+ "reference": "615e3cf75d00a7d6788316d9631957991ba9c26a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/615e3cf75d00a7d6788316d9631957991ba9c26a",
+ "reference": "615e3cf75d00a7d6788316d9631957991ba9c26a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1.3",
+ "symfony/polyfill-mbstring": "~1.0"
+ },
+ "conflict": {
+ "symfony/config": "<3.4",
+ "symfony/dependency-injection": "<3.4",
+ "symfony/yaml": "<3.4"
+ },
+ "require-dev": {
+ "psr/log": "~1.0",
+ "symfony/config": "~3.4|~4.0",
+ "symfony/console": "~3.4|~4.0",
+ "symfony/dependency-injection": "~3.4|~4.0",
+ "symfony/finder": "~2.8|~3.0|~4.0",
+ "symfony/intl": "~3.4|~4.0",
+ "symfony/yaml": "~3.4|~4.0"
+ },
+ "suggest": {
+ "psr/log-implementation": "To use logging capability in translator",
+ "symfony/config": "",
+ "symfony/yaml": ""
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Translation\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Translation Component",
+ "homepage": "https://symfony.com",
+ "time": "2018-11-26T10:26:29+00:00"
+ },
+ {
+ "name": "symfony/var-dumper",
+ "version": "v4.1.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/var-dumper.git",
+ "reference": "42a55e4a4a7421124636f6f15845187704be0423"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/42a55e4a4a7421124636f6f15845187704be0423",
+ "reference": "42a55e4a4a7421124636f6f15845187704be0423",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1.3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php72": "~1.5"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
+ "symfony/console": "<3.4"
+ },
+ "require-dev": {
+ "ext-iconv": "*",
+ "symfony/process": "~3.4|~4.0",
+ "twig/twig": "~1.34|~2.4"
+ },
+ "suggest": {
+ "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
+ "ext-intl": "To show region name in time zone dump",
+ "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
+ },
+ "bin": [
+ "Resources/bin/var-dump-server"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.1-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "Resources/functions/dump.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\VarDumper\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony mechanism for exploring and dumping PHP variables",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "debug",
+ "dump"
+ ],
+ "time": "2018-11-20T16:14:00+00:00"
+ },
+ {
+ "name": "tijsverkoyen/css-to-inline-styles",
+ "version": "2.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
+ "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757",
+ "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5 || ^7.0",
+ "symfony/css-selector": "^2.7 || ^3.0 || ^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "TijsVerkoyen\\CssToInlineStyles\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Tijs Verkoyen",
+ "email": "css_to_inline_styles@verkoyen.eu",
+ "role": "Developer"
+ }
+ ],
+ "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.",
+ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
+ "time": "2017-11-27T11:13:29+00:00"
+ },
+ {
+ "name": "vlucas/phpdotenv",
+ "version": "v2.5.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vlucas/phpdotenv.git",
+ "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e",
+ "reference": "8abb4f9aa89ddea9d52112c65bbe8d0125e2fa8e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.9"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.8.35 || ^5.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.5-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dotenv\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Vance Lucas",
+ "email": "vance@vancelucas.com",
+ "homepage": "http://www.vancelucas.com"
+ }
+ ],
+ "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
+ "keywords": [
+ "dotenv",
+ "env",
+ "environment"
+ ],
+ "time": "2018-07-29T20:33:41+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "beyondcode/laravel-dump-server",
+ "version": "1.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/beyondcode/laravel-dump-server.git",
+ "reference": "8864b9efcb48e0a79e83014dd7f0a5481f5c808f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/8864b9efcb48e0a79e83014dd7f0a5481f5c808f",
+ "reference": "8864b9efcb48e0a79e83014dd7f0a5481f5c808f",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/console": "5.6.*|5.7.*|5.8.*",
+ "illuminate/http": "5.6.*|5.7.*|5.8.*",
+ "illuminate/support": "5.6.*|5.7.*|5.8.*",
+ "php": "^7.1",
+ "symfony/var-dumper": "^4.1.1"
+ },
+ "require-dev": {
+ "larapack/dd": "^1.0",
+ "phpunit/phpunit": "^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "BeyondCode\\DumpServer\\DumpServerServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "BeyondCode\\DumpServer\\": "src"
+ },
+ "files": [
+ "helpers.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marcel Pociot",
+ "email": "marcel@beyondco.de",
+ "homepage": "https://beyondcode.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Symfony Var-Dump Server for Laravel",
+ "homepage": "https://github.com/beyondcode/laravel-dump-server",
+ "keywords": [
+ "beyondcode",
+ "laravel-dump-server"
+ ],
+ "time": "2018-10-04T07:22:24+00:00"
+ },
+ {
+ "name": "doctrine/instantiator",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
+ "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1"
+ },
+ "require-dev": {
+ "athletic/athletic": "~0.1.8",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpunit/phpunit": "^6.2.3",
+ "squizlabs/php_codesniffer": "^3.0.2"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "http://ocramius.github.com/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://github.com/doctrine/instantiator",
+ "keywords": [
+ "constructor",
+ "instantiate"
+ ],
+ "time": "2017-07-22T11:58:36+00:00"
+ },
+ {
+ "name": "filp/whoops",
+ "version": "2.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/filp/whoops.git",
+ "reference": "bc0fd11bc455cc20ee4b5edabc63ebbf859324c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/bc0fd11bc455cc20ee4b5edabc63ebbf859324c7",
+ "reference": "bc0fd11bc455cc20ee4b5edabc63ebbf859324c7",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5.9 || ^7.0",
+ "psr/log": "^1.0.1"
+ },
+ "require-dev": {
+ "mockery/mockery": "^0.9 || ^1.0",
+ "phpunit/phpunit": "^4.8.35 || ^5.7",
+ "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0"
+ },
+ "suggest": {
+ "symfony/var-dumper": "Pretty print complex values better with var-dumper available",
+ "whoops/soap": "Formats errors as SOAP responses"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.2-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Whoops\\": "src/Whoops/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Filipe Dobreira",
+ "homepage": "https://github.com/filp",
+ "role": "Developer"
+ }
+ ],
+ "description": "php error handling for cool kids",
+ "homepage": "https://filp.github.io/whoops/",
+ "keywords": [
+ "error",
+ "exception",
+ "handling",
+ "library",
+ "throwable",
+ "whoops"
+ ],
+ "time": "2018-10-23T09:00:00+00:00"
+ },
+ {
+ "name": "fzaninotto/faker",
+ "version": "v1.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/fzaninotto/Faker.git",
+ "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de",
+ "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.3 || ^7.0"
+ },
+ "require-dev": {
+ "ext-intl": "*",
+ "phpunit/phpunit": "^4.8.35 || ^5.7",
+ "squizlabs/php_codesniffer": "^1.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.8-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Faker\\": "src/Faker/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "François Zaninotto"
+ }
+ ],
+ "description": "Faker is a PHP library that generates fake data for you.",
+ "keywords": [
+ "data",
+ "faker",
+ "fixtures"
+ ],
+ "time": "2018-07-12T10:23:15+00:00"
+ },
+ {
+ "name": "hamcrest/hamcrest-php",
+ "version": "v2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/hamcrest/hamcrest-php.git",
+ "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/776503d3a8e85d4f9a1148614f95b7a608b046ad",
+ "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3|^7.0"
+ },
+ "replace": {
+ "cordoval/hamcrest-php": "*",
+ "davedevelopment/hamcrest-php": "*",
+ "kodova/hamcrest-php": "*"
+ },
+ "require-dev": {
+ "phpunit/php-file-iterator": "1.3.3",
+ "phpunit/phpunit": "~4.0",
+ "satooshi/php-coveralls": "^1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "hamcrest"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD"
+ ],
+ "description": "This is the PHP port of Hamcrest Matchers",
+ "keywords": [
+ "test"
+ ],
+ "time": "2016-01-20T08:20:44+00:00"
+ },
+ {
+ "name": "mockery/mockery",
+ "version": "1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mockery/mockery.git",
+ "reference": "100633629bf76d57430b86b7098cd6beb996a35a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/100633629bf76d57430b86b7098cd6beb996a35a",
+ "reference": "100633629bf76d57430b86b7098cd6beb996a35a",
+ "shasum": ""
+ },
+ "require": {
+ "hamcrest/hamcrest-php": "~2.0",
+ "lib-pcre": ">=7.0",
+ "php": ">=5.6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~5.7.10|~6.5|~7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Mockery": "library/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Pádraic Brady",
+ "email": "padraic.brady@gmail.com",
+ "homepage": "http://blog.astrumfutura.com"
+ },
+ {
+ "name": "Dave Marshall",
+ "email": "dave.marshall@atstsolutions.co.uk",
+ "homepage": "http://davedevelopment.co.uk"
+ }
+ ],
+ "description": "Mockery is a simple yet flexible PHP mock object framework",
+ "homepage": "https://github.com/mockery/mockery",
+ "keywords": [
+ "BDD",
+ "TDD",
+ "library",
+ "mock",
+ "mock objects",
+ "mockery",
+ "stub",
+ "test",
+ "test double",
+ "testing"
+ ],
+ "time": "2018-10-02T21:52:37+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.8.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
+ "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1"
+ },
+ "replace": {
+ "myclabs/deep-copy": "self.version"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.0",
+ "doctrine/common": "^2.6",
+ "phpunit/phpunit": "^7.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ },
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "time": "2018-06-11T23:09:50+00:00"
+ },
+ {
+ "name": "nunomaduro/collision",
+ "version": "v2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nunomaduro/collision.git",
+ "reference": "b5feb0c0d92978ec7169232ce5d70d6da6b29f63"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/b5feb0c0d92978ec7169232ce5d70d6da6b29f63",
+ "reference": "b5feb0c0d92978ec7169232ce5d70d6da6b29f63",
+ "shasum": ""
+ },
+ "require": {
+ "filp/whoops": "^2.1.4",
+ "jakub-onderka/php-console-highlighter": "0.3.*|0.4.*",
+ "php": "^7.1",
+ "symfony/console": "~2.8|~3.3|~4.0"
+ },
+ "require-dev": {
+ "laravel/framework": "5.7.*",
+ "nunomaduro/larastan": "^0.3.0",
+ "phpstan/phpstan": "^0.10",
+ "phpunit/phpunit": "~7.3"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "NunoMaduro\\Collision\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nuno Maduro",
+ "email": "enunomaduro@gmail.com"
+ }
+ ],
+ "description": "Cli error handling for console/command-line PHP applications.",
+ "keywords": [
+ "artisan",
+ "cli",
+ "command-line",
+ "console",
+ "error",
+ "handling",
+ "laravel",
+ "laravel-zero",
+ "php",
+ "symfony"
+ ],
+ "time": "2018-11-21T21:40:54+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
+ "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-phar": "*",
+ "phar-io/version": "^2.0",
+ "php": "^5.6 || ^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "time": "2018-07-08T19:23:20+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
+ "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "time": "2018-07-08T19:19:57+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-common",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+ "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+ "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.5"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.6"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": [
+ "src"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "opensource@ijaap.nl"
+ }
+ ],
+ "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+ "homepage": "http://www.phpdoc.org",
+ "keywords": [
+ "FQSEN",
+ "phpDocumentor",
+ "phpdoc",
+ "reflection",
+ "static analysis"
+ ],
+ "time": "2017-09-11T18:02:19+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "4.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "94fd0001232e47129dd3504189fa1c7225010d08"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08",
+ "reference": "94fd0001232e47129dd3504189fa1c7225010d08",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0",
+ "phpdocumentor/reflection-common": "^1.0.0",
+ "phpdocumentor/type-resolver": "^0.4.0",
+ "webmozart/assert": "^1.0"
+ },
+ "require-dev": {
+ "doctrine/instantiator": "~1.0.5",
+ "mockery/mockery": "^1.0",
+ "phpunit/phpunit": "^6.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+ "time": "2017-11-30T07:14:17+00:00"
+ },
+ {
+ "name": "phpdocumentor/type-resolver",
+ "version": "0.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
+ "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
+ "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5 || ^7.0",
+ "phpdocumentor/reflection-common": "^1.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^0.9.4",
+ "phpunit/phpunit": "^5.2||^4.8.24"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "time": "2017-07-14T14:27:02+00:00"
+ },
+ {
+ "name": "phpspec/prophecy",
+ "version": "1.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpspec/prophecy.git",
+ "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+ "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.0.2",
+ "php": "^5.3|^7.0",
+ "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
+ "sebastian/comparator": "^1.1|^2.0|^3.0",
+ "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+ },
+ "require-dev": {
+ "phpspec/phpspec": "^2.5|^3.2",
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Prophecy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
+ },
+ {
+ "name": "Marcello Duarte",
+ "email": "marcello.duarte@gmail.com"
+ }
+ ],
+ "description": "Highly opinionated mocking framework for PHP 5.3+",
+ "homepage": "https://github.com/phpspec/prophecy",
+ "keywords": [
+ "Double",
+ "Dummy",
+ "fake",
+ "mock",
+ "spy",
+ "stub"
+ ],
+ "time": "2018-08-05T17:53:17+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "6.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
+ "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.1",
+ "phpunit/php-file-iterator": "^2.0",
+ "phpunit/php-text-template": "^1.2.1",
+ "phpunit/php-token-stream": "^3.0",
+ "sebastian/code-unit-reverse-lookup": "^1.0.1",
+ "sebastian/environment": "^3.1 || ^4.0",
+ "sebastian/version": "^2.0.1",
+ "theseer/tokenizer": "^1.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0"
+ },
+ "suggest": {
+ "ext-xdebug": "^2.6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "6.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "time": "2018-10-31T16:06:48+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "050bedf145a257b1ff02746c31894800e5122946"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946",
+ "reference": "050bedf145a257b1ff02746c31894800e5122946",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+ "keywords": [
+ "filesystem",
+ "iterator"
+ ],
+ "time": "2018-09-13T20:33:42+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "time": "2015-06-21T13:50:34+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b8454ea6958c3dee38453d3bd571e023108c91f",
+ "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "time": "2018-02-01T13:07:23+00:00"
+ },
+ {
+ "name": "phpunit/php-token-stream",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-token-stream.git",
+ "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/c99e3be9d3e85f60646f152f9002d46ed7770d18",
+ "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": "^7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Wrapper around PHP's tokenizer extension.",
+ "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
+ "keywords": [
+ "tokenizer"
+ ],
+ "time": "2018-10-30T05:52:18+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "7.4.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "b1be2c8530c4c29c3519a052c9fb6cee55053bbd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b1be2c8530c4c29c3519a052c9fb6cee55053bbd",
+ "reference": "b1be2c8530c4c29c3519a052c9fb6cee55053bbd",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.1",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "myclabs/deep-copy": "^1.7",
+ "phar-io/manifest": "^1.0.2",
+ "phar-io/version": "^2.0",
+ "php": "^7.1",
+ "phpspec/prophecy": "^1.7",
+ "phpunit/php-code-coverage": "^6.0.7",
+ "phpunit/php-file-iterator": "^2.0.1",
+ "phpunit/php-text-template": "^1.2.1",
+ "phpunit/php-timer": "^2.0",
+ "sebastian/comparator": "^3.0",
+ "sebastian/diff": "^3.0",
+ "sebastian/environment": "^3.1 || ^4.0",
+ "sebastian/exporter": "^3.1",
+ "sebastian/global-state": "^2.0",
+ "sebastian/object-enumerator": "^3.0.3",
+ "sebastian/resource-operations": "^2.0",
+ "sebastian/version": "^2.0.1"
+ },
+ "conflict": {
+ "phpunit/phpunit-mock-objects": "*"
+ },
+ "require-dev": {
+ "ext-pdo": "*"
+ },
+ "suggest": {
+ "ext-soap": "*",
+ "ext-xdebug": "*",
+ "phpunit/php-invoker": "^2.0"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "7.4-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "time": "2018-11-14T16:52:02+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "1.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+ "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.6 || ^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^5.7 || ^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "time": "2017-03-04T06:30:41+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
+ "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1",
+ "sebastian/diff": "^3.0",
+ "sebastian/exporter": "^3.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "time": "2018-07-12T15:12:46+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "3.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "366541b989927187c4ca70490a35615d3fef2dce"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/366541b989927187c4ca70490a35615d3fef2dce",
+ "reference": "366541b989927187c4ca70490a35615d3fef2dce",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0",
+ "symfony/process": "^2 || ^3.3 || ^4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "time": "2018-06-10T07:54:39+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "4.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "febd209a219cea7b56ad799b30ebbea34b71eb8f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/febd209a219cea7b56ad799b30ebbea34b71eb8f",
+ "reference": "febd209a219cea7b56ad799b30ebbea34b71eb8f",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.4"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "time": "2018-11-25T09:31:21+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "3.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
+ "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0",
+ "sebastian/recursion-context": "^3.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "http://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "time": "2017-04-03T13:19:02+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
+ "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "time": "2017-04-27T15:39:26+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5",
+ "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0",
+ "sebastian/object-reflector": "^1.1.1",
+ "sebastian/recursion-context": "^3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "time": "2017-08-03T12:35:26+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "1.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "773f97c67f28de00d397be301821b06708fca0be"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be",
+ "reference": "773f97c67f28de00d397be301821b06708fca0be",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Allows reflection of object attributes, including inherited and non-public ones",
+ "homepage": "https://github.com/sebastianbergmann/object-reflector/",
+ "time": "2017-03-29T09:07:27+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "3.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
+ "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^6.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "time": "2017-03-03T06:23:57+00:00"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
+ "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "time": "2018-10-04T04:07:39+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
+ "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "time": "2016-10-03T07:35:21+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b",
+ "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "time": "2017-04-07T12:08:54+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozart/assert.git",
+ "reference": "0df1908962e7a3071564e857d86874dad1ef204a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a",
+ "reference": "0df1908962e7a3071564e857d86874dad1ef204a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3.3 || ^7.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.6",
+ "sebastian/version": "^1.0.1"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Webmozart\\Assert\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Assertions to validate method input/output with nice error messages.",
+ "keywords": [
+ "assert",
+ "check",
+ "validate"
+ ],
+ "time": "2018-01-29T19:49:41+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "dev",
+ "stability-flags": [],
+ "prefer-stable": true,
+ "prefer-lowest": false,
+ "platform": {
+ "php": "^7.1.3"
+ },
+ "platform-dev": []
+}
diff --git a/config/app.php b/config/app.php
new file mode 100644
index 0000000..361936d
--- /dev/null
+++ b/config/app.php
@@ -0,0 +1,241 @@
+ env('APP_NAME', 'Laravel'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Environment
+ |--------------------------------------------------------------------------
+ |
+ | This value determines the "environment" your application is currently
+ | running in. This may determine how you prefer to configure various
+ | services the application utilizes. Set this in your ".env" file.
+ |
+ */
+
+ 'env' => env('APP_ENV', 'production'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Debug Mode
+ |--------------------------------------------------------------------------
+ |
+ | When your application is in debug mode, detailed error messages with
+ | stack traces will be shown on every error that occurs within your
+ | application. If disabled, a simple generic error page is shown.
+ |
+ */
+
+ 'debug' => env('APP_DEBUG', false),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application URL
+ |--------------------------------------------------------------------------
+ |
+ | This URL is used by the console to properly generate URLs when using
+ | the Artisan command line tool. You should set this to the root of
+ | your application so that it is used when running Artisan tasks.
+ |
+ */
+
+ 'url' => env('APP_URL', 'http://localhost'),
+
+ 'asset_url' => env('ASSET_URL', null),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Port
+ |--------------------------------------------------------------------------
+ |
+ | Videotex Server Port
+ |
+ */
+
+ 'bind' => env('APP_BIND','0.0.0.0'),
+ 'port' => env('APP_PORT',516),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Timezone
+ |--------------------------------------------------------------------------
+ |
+ | Here you may specify the default timezone for your application, which
+ | will be used by the PHP date and date-time functions. We have gone
+ | ahead and set this to a sensible default for you out of the box.
+ |
+ */
+
+ 'timezone' => 'UTC',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Locale Configuration
+ |--------------------------------------------------------------------------
+ |
+ | The application locale determines the default locale that will be used
+ | by the translation service provider. You are free to set this value
+ | to any of the locales which will be supported by the application.
+ |
+ */
+
+ 'locale' => 'en',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Application Fallback Locale
+ |--------------------------------------------------------------------------
+ |
+ | The fallback locale determines the locale to use when the current one
+ | is not available. You may change the value to correspond to any of
+ | the language folders that are provided through your application.
+ |
+ */
+
+ 'fallback_locale' => 'en',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Faker Locale
+ |--------------------------------------------------------------------------
+ |
+ | This locale will be used by the Faker PHP library when generating fake
+ | data for your database seeds. For example, this will be used to get
+ | localized telephone numbers, street address information and more.
+ |
+ */
+
+ 'faker_locale' => 'en_US',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Encryption Key
+ |--------------------------------------------------------------------------
+ |
+ | This key is used by the Illuminate encrypter service and should be set
+ | to a random, 32 character string, otherwise these encrypted strings
+ | will not be safe. Please do this before deploying an application!
+ |
+ */
+
+ 'key' => env('APP_KEY'),
+
+ 'cipher' => 'AES-256-CBC',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Autoloaded Service Providers
+ |--------------------------------------------------------------------------
+ |
+ | The service providers listed here will be automatically loaded on the
+ | request to your application. Feel free to add your own services to
+ | this array to grant expanded functionality to your applications.
+ |
+ */
+
+ 'providers' => [
+
+ /*
+ * Laravel Framework Service Providers...
+ */
+ Illuminate\Auth\AuthServiceProvider::class,
+ Illuminate\Broadcasting\BroadcastServiceProvider::class,
+ Illuminate\Bus\BusServiceProvider::class,
+ Illuminate\Cache\CacheServiceProvider::class,
+ Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
+ Illuminate\Cookie\CookieServiceProvider::class,
+ Illuminate\Database\DatabaseServiceProvider::class,
+ Illuminate\Encryption\EncryptionServiceProvider::class,
+ Illuminate\Filesystem\FilesystemServiceProvider::class,
+ Illuminate\Foundation\Providers\FoundationServiceProvider::class,
+ Illuminate\Hashing\HashServiceProvider::class,
+ Illuminate\Mail\MailServiceProvider::class,
+ Illuminate\Notifications\NotificationServiceProvider::class,
+ Illuminate\Pagination\PaginationServiceProvider::class,
+ Illuminate\Pipeline\PipelineServiceProvider::class,
+ Illuminate\Queue\QueueServiceProvider::class,
+ Illuminate\Redis\RedisServiceProvider::class,
+ Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
+ Illuminate\Session\SessionServiceProvider::class,
+ Illuminate\Translation\TranslationServiceProvider::class,
+ Illuminate\Validation\ValidationServiceProvider::class,
+ Illuminate\View\ViewServiceProvider::class,
+
+ /*
+ * Package Service Providers...
+ */
+
+ /*
+ * Application Service Providers...
+ */
+ App\Providers\AppServiceProvider::class,
+ App\Providers\AuthServiceProvider::class,
+ // App\Providers\BroadcastServiceProvider::class,
+ App\Providers\EventServiceProvider::class,
+ App\Providers\RouteServiceProvider::class,
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Class Aliases
+ |--------------------------------------------------------------------------
+ |
+ | This array of class aliases will be registered when this application
+ | is started. However, feel free to register as many as you wish as
+ | the aliases are "lazy" loaded so they don't hinder performance.
+ |
+ */
+
+ 'aliases' => [
+
+ 'App' => Illuminate\Support\Facades\App::class,
+ 'Artisan' => Illuminate\Support\Facades\Artisan::class,
+ 'Auth' => Illuminate\Support\Facades\Auth::class,
+ 'Blade' => Illuminate\Support\Facades\Blade::class,
+ 'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
+ 'Bus' => Illuminate\Support\Facades\Bus::class,
+ 'Cache' => Illuminate\Support\Facades\Cache::class,
+ 'Config' => Illuminate\Support\Facades\Config::class,
+ 'Cookie' => Illuminate\Support\Facades\Cookie::class,
+ 'Crypt' => Illuminate\Support\Facades\Crypt::class,
+ 'DB' => Illuminate\Support\Facades\DB::class,
+ 'Eloquent' => Illuminate\Database\Eloquent\Model::class,
+ 'Event' => Illuminate\Support\Facades\Event::class,
+ 'File' => Illuminate\Support\Facades\File::class,
+ 'Gate' => Illuminate\Support\Facades\Gate::class,
+ 'Hash' => Illuminate\Support\Facades\Hash::class,
+ 'Lang' => Illuminate\Support\Facades\Lang::class,
+ 'Log' => Illuminate\Support\Facades\Log::class,
+ 'Mail' => Illuminate\Support\Facades\Mail::class,
+ 'Notification' => Illuminate\Support\Facades\Notification::class,
+ 'Password' => Illuminate\Support\Facades\Password::class,
+ 'Queue' => Illuminate\Support\Facades\Queue::class,
+ 'Redirect' => Illuminate\Support\Facades\Redirect::class,
+ 'Redis' => Illuminate\Support\Facades\Redis::class,
+ 'Request' => Illuminate\Support\Facades\Request::class,
+ 'Response' => Illuminate\Support\Facades\Response::class,
+ 'Route' => Illuminate\Support\Facades\Route::class,
+ 'Schema' => Illuminate\Support\Facades\Schema::class,
+ 'Session' => Illuminate\Support\Facades\Session::class,
+ 'Storage' => Illuminate\Support\Facades\Storage::class,
+ 'URL' => Illuminate\Support\Facades\URL::class,
+ 'Validator' => Illuminate\Support\Facades\Validator::class,
+ 'View' => Illuminate\Support\Facades\View::class,
+
+ ],
+
+];
diff --git a/config/constants.php b/config/constants.php
new file mode 100644
index 0000000..bffee7a
--- /dev/null
+++ b/config/constants.php
@@ -0,0 +1,84 @@
+ env('DB_CONNECTION', 'mysql'),
+
+ /*
+ |--------------------------------------------------------------------------
+ | Database Connections
+ |--------------------------------------------------------------------------
+ |
+ | Here are each of the database connections setup for your application.
+ | Of course, examples of configuring each database platform that is
+ | supported by Laravel is shown below to make development simple.
+ |
+ |
+ | All database work in Laravel is done through the PHP PDO facilities
+ | so make sure you have the driver for your particular database of
+ | choice installed on your machine before you begin development.
+ |
+ */
+
+ 'connections' => [
+
+ 'sqlite' => [
+ 'driver' => 'sqlite',
+ 'database' => env('DB_DATABASE', database_path('database.sqlite')),
+ 'prefix' => '',
+ 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
+ ],
+
+ 'mysql' => [
+ 'driver' => 'mysql',
+ 'host' => env('DB_HOST', '127.0.0.1'),
+ 'port' => env('DB_PORT', '3306'),
+ 'database' => env('DB_DATABASE', 'forge'),
+ 'username' => env('DB_USERNAME', 'forge'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'unix_socket' => env('DB_SOCKET', ''),
+ 'charset' => 'utf8mb4',
+ 'collation' => 'utf8mb4_unicode_ci',
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ 'strict' => true,
+ 'engine' => null,
+ ],
+
+ 'pgsql' => [
+ 'driver' => 'pgsql',
+ 'host' => env('DB_HOST', '127.0.0.1'),
+ 'port' => env('DB_PORT', '5432'),
+ 'database' => env('DB_DATABASE', 'forge'),
+ 'username' => env('DB_USERNAME', 'forge'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'charset' => 'utf8',
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ 'schema' => 'public',
+ 'sslmode' => 'prefer',
+ ],
+
+ 'sqlsrv' => [
+ 'driver' => 'sqlsrv',
+ 'host' => env('DB_HOST', 'localhost'),
+ 'port' => env('DB_PORT', '1433'),
+ 'database' => env('DB_DATABASE', 'forge'),
+ 'username' => env('DB_USERNAME', 'forge'),
+ 'password' => env('DB_PASSWORD', ''),
+ 'charset' => 'utf8',
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ ],
+
+ ],
+
+ /*
+ |--------------------------------------------------------------------------
+ | Migration Repository Table
+ |--------------------------------------------------------------------------
+ |
+ | This table keeps track of all the migrations that have already run for
+ | your application. Using this information, we can determine which of
+ | the migrations on disk haven't actually been run in the database.
+ |
+ */
+
+ 'migrations' => 'migrations',
+
+ /*
+ |--------------------------------------------------------------------------
+ | Redis Databases
+ |--------------------------------------------------------------------------
+ |
+ | Redis is an open source, fast, and advanced key-value store that also
+ | provides a richer body of commands than a typical key-value system
+ | such as APC or Memcached. Laravel makes it easy to dig right in.
+ |
+ */
+
+ 'redis' => [
+
+ 'client' => 'predis',
+
+ 'default' => [
+ 'host' => env('REDIS_HOST', '127.0.0.1'),
+ 'password' => env('REDIS_PASSWORD', null),
+ 'port' => env('REDIS_PORT', 6379),
+ 'database' => env('REDIS_DB', 0),
+ ],
+
+ 'cache' => [
+ 'host' => env('REDIS_HOST', '127.0.0.1'),
+ 'password' => env('REDIS_PASSWORD', null),
+ 'port' => env('REDIS_PORT', 6379),
+ 'database' => env('REDIS_CACHE_DB', 1),
+ ],
+
+ ],
+
+];
diff --git a/database/.gitignore b/database/.gitignore
new file mode 100644
index 0000000..9b1dffd
--- /dev/null
+++ b/database/.gitignore
@@ -0,0 +1 @@
+*.sqlite
diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php
new file mode 100644
index 0000000..ec15e58
--- /dev/null
+++ b/database/factories/UserFactory.php
@@ -0,0 +1,24 @@
+define(App\User::class, function (Faker $faker) {
+ return [
+ 'name' => $faker->name,
+ 'email' => $faker->unique()->safeEmail,
+ 'email_verified_at' => now(),
+ 'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
+ 'remember_token' => str_random(10),
+ ];
+});
diff --git a/database/migrations/.gitignore b/database/migrations/.gitignore
new file mode 100644
index 0000000..e69de29
diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php
new file mode 100644
index 0000000..91cb6d1
--- /dev/null
+++ b/database/seeds/DatabaseSeeder.php
@@ -0,0 +1,16 @@
+call(UsersTableSeeder::class);
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..cb2f688
--- /dev/null
+++ b/package.json
@@ -0,0 +1,22 @@
+{
+ "private": true,
+ "scripts": {
+ "dev": "npm run development",
+ "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
+ "watch": "npm run development -- --watch",
+ "watch-poll": "npm run watch -- --watch-poll",
+ "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
+ "prod": "npm run production",
+ "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
+ },
+ "devDependencies": {
+ "axios": "^0.18",
+ "bootstrap": "^4.0.0",
+ "cross-env": "^5.1",
+ "jquery": "^3.2",
+ "laravel-mix": "^2.0",
+ "lodash": "^4.17.5",
+ "popper.js": "^1.12",
+ "vue": "^2.5.17"
+ }
+}
diff --git a/phpunit.xml b/phpunit.xml
new file mode 100644
index 0000000..9566b67
--- /dev/null
+++ b/phpunit.xml
@@ -0,0 +1,33 @@
+
+
+
+
+ ./tests/Unit
+
+
+
+ ./tests/Feature
+
+
+
+
+ ./app
+
+
+
+
+
+
+
+
+
+
+
diff --git a/public/.htaccess b/public/.htaccess
new file mode 100644
index 0000000..b75525b
--- /dev/null
+++ b/public/.htaccess
@@ -0,0 +1,21 @@
+
+
+ Options -MultiViews -Indexes
+
+
+ RewriteEngine On
+
+ # Handle Authorization Header
+ RewriteCond %{HTTP:Authorization} .
+ RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
+
+ # Redirect Trailing Slashes If Not A Folder...
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteCond %{REQUEST_URI} (.+)/$
+ RewriteRule ^ %1 [L,R=301]
+
+ # Handle Front Controller...
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteRule ^ index.php [L]
+
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 0000000..eb05362
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:
diff --git a/server.php b/server.php
new file mode 100644
index 0000000..5fb6379
--- /dev/null
+++ b/server.php
@@ -0,0 +1,21 @@
+
+ */
+
+$uri = urldecode(
+ parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
+);
+
+// This file allows us to emulate Apache's "mod_rewrite" functionality from the
+// built-in PHP web server. This provides a convenient way to test a Laravel
+// application without having installed a "real" web server software here.
+if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
+ return false;
+}
+
+require_once __DIR__.'/public/index.php';
diff --git a/storage/app/.gitignore b/storage/app/.gitignore
new file mode 100644
index 0000000..8f4803c
--- /dev/null
+++ b/storage/app/.gitignore
@@ -0,0 +1,3 @@
+*
+!public/
+!.gitignore
diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/storage/app/public/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore
new file mode 100644
index 0000000..b02b700
--- /dev/null
+++ b/storage/framework/.gitignore
@@ -0,0 +1,8 @@
+config.php
+routes.php
+schedule-*
+compiled.php
+services.json
+events.scanned.php
+routes.scanned.php
+down
diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore
new file mode 100644
index 0000000..01e4a6c
--- /dev/null
+++ b/storage/framework/cache/.gitignore
@@ -0,0 +1,3 @@
+*
+!data/
+!.gitignore
diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/storage/framework/cache/data/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/storage/framework/sessions/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/storage/framework/testing/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/storage/framework/views/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore
new file mode 100644
index 0000000..d6b7ef3
--- /dev/null
+++ b/storage/logs/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
diff --git a/viewdatahost.php b/viewdatahost.php
deleted file mode 100644
index 4c4aeb7..0000000
--- a/viewdatahost.php
+++ /dev/null
@@ -1,958 +0,0 @@
- 'systel', 'n' =>'username', 'a' => 'address#', 'd' => '%date');
-$fieldoptions = array('f' => array('edit' => true));
-
-include_once('classes/vvdatabase.class.php');
-include_once('classes/vv.class.php');
-
-if (count($argv) == 1) {
- include_once('config/config.php');
-} else {
- if (count($argv) == 3 && $argv[1] == '-c') {
- include_once('config/' . $argv[2]);
- }
-}
-
-$db = new vvdb();
-// Connect to database. Returns error message if unable to connect.
-$r = $db->connect($config['dbserver'],$config['database'],$config['dbuser'], $config['dbpass']);
-if (!empty($r)) {
- http_response_code(500);
- die ($r);
-}
-
-
-
-/**
- * Connection handler
- */
-function onConnect( $client ) {
- global $config;
- global $fieldoptions;
-
- $pid = pcntl_fork();
-
- if ($pid == -1) {
- die('could not fork');
- } else if ($pid) {
- // parent process
- return;
- }
-
-
-
-
- $read = '';
- printf( "[%s] Connected at port %d\n", $client->getaddress(), $client->getPort() );
-
- $client->send(CLS . "Connecting..");
-
-
-
- $db = new vvdb();
- // Connect to database. Returns error message if unable to connect.
- $r = $db->connect($config['dbserver'],$config['database'],$config['dbuser'], $config['dbpass']);
- if (!empty($r)) {
- http_response_code(500);
- $client->send(CLS . UP . ERR_DATABASE);
- die ($r);
- }
-
-
-
- // $user will eventually contain validated user details.
- $user = array( 'systel' => '019990001',
- 'username' => 'DEMONSTRATION DATA USER',
- 'address1' => '8 HERBAL HILL',
- 'address2' => 'LONDON',
- 'address3' => 'EC1R 5EJ',
- 'address4' => '',
- 'address5' => '',
- 'CUGS' => array( 7800, 15500), // Closed User Groups this user has access to
- );
-
-
-
-
- $history = array(); // backup history
-
-
-
- $cmd = ''; // current *command being typed in
- $mode = false; // input mode.
- $prevmode = false; // previous mode
- $timewarp = false;
- $action = ACTION_GOTO; // do something if set. used here to trigger a goto to the login form.
- if (isset($config['loginpage'])) {
- $page = $config['loginpage'];
- $subpage = 'a';
- } else if (!empty($service['start_page'])) {
- $page = $service['start_page'];
- $subpage = 'a';
- } else {
- $page = '1'; // next page
- $subpage = 'a';
- }
- $curpage = ''; // current page
- $cursub = '';
- $curfield = null; // current input field
- $curfp = 0; // current field, position within.
- $blp = 0; // botton line polluted (by this no. of characters)
- $resetpsn = false; // flag to reset position (used in fields)
-
- $service = $db->getServiceById($config['service_id']);
- $varient = $db->getAllVarients($config['service_id'], $config['varient_id']);
- if ($varient === false) {
- die ("no varient");
- }
- $varient = reset($varient);
-
-
- $matches = array();
- if (preg_match('@'.$service['page_format'].'@',$service['start_frame'],$matches)) {
- $page = $matches[1];
- $subpage = $matches[2];
- echo " Using start page ".$page.$subpage."\n";
- }
-// $start = $service['start_frame'];
-// where to start from
-
-
- while( $action != ACTION_TERMINATE ) {
-
-/*
- This section deals with a keypress
-*/
- $read = $client->read(1);
- if( $read != '' ) {
- printf("mode:%s cmd:%s page:%s Received %s, (%s)\n",$mode, $cmd,$page,$read, ord($read));
- switch($mode){
-
-
- /*
- Currently accepting keypresses into an input field on an RF
- */
- case MODE_FIELD: // entering data into a field
- $cmd = '';
- $action = false;
- switch($pagedata['type']){
- case 'a': // response frame
- switch ($read) {
- case '_': //# ends field entry
- $curfield ++; //skip to next field
- if ($curfield < count($fields)) { // skip past non-editable fields
- for ($i = $curfield; $i < count($fields); $i++) {
- if (isset($fieldoptions[$fields[$i]['type']]) &&
- $fieldoptions[$fields[$i]['type']]['edit']) {
- $curfield = $i;
- break;
- }
- }
- if ($curfield !== false) {
- $client->send(outputPosition($fields[$curfield]['x'],$fields[$curfield]['y']).CON);
- $mode = MODE_FIELD;
- $fielddate[$curfield] = '';
- } else {
- // there were no (more) editable fields.
- $action = ACTION_SUBMITRF;
- }
- } else {
- // done them all editable fields.
- $action = ACTION_SUBMITRF;
- }
- break;
- case '*':
- $prevmode = MODE_FIELD;
- $action = ACTION_STAR;
- break;
- case chr(8): // left
- if ($curfp) {
- $client->send($read);
- $curfp--;
- };
- break;
- case chr(9): // right
- if ($curfp < $fields[$curfield]['length']) {
- $client->send($read);
- $curfp++;
- };
- break;
- case chr(10): // down
- if ($curfp + 40 < $fields[$curfield]['length']) {
- $client->send($read);
- $curfp = $curfp + 40;
- };
- break;
- case chr(11): // up
- if ($curfp - 40 >= 0) {
- $client->send($read);
- $curfp = $curfp - 40;
- };
- break;
- case chr(13): // CR
- if ($curfp + $fields[$curfield]['x'] > 40) { // on second or later line of a field
- $client->send($read);
- $curfp = (($curfp + $fields[$curfield]['x'])%40)*40;
- } else {
- $client->send(outputPosition($fields[$curfield]['x'],$fields[$curfield]['y']).CON);
- $curfp = 0;
- }
- break;
-
- case chr(27): // Escape ?
-
- break; ;
-
- default:
- if (ord($read) > 31 && $curfp < $fields[$curfield]['length']) {
- $fielddata[$curfield]{$curfp} = $read;
- $curfp++;
- $client->send($read);
- }
- } // switch character pressed
- break;
- default: // other frame types ... shouldn't get here
- ;
- } // switch frame types
-
- break;
-
- /*
- Currently waiting at the Key 1 to send, 2 not to send prompt.
- */
- case MODE_SUBMITRF:
- switch($read){
- case '1':
- if(mail('robert@irrelevant.com', $service['service_name'], implode("\n",$fielddata))) {
- sendBaseline($client, $blp, MSG_SENT);
- $mode = MODE_RFSENT;
- } else {
- sendBaseline($client, $blp, ERR_NOTSENT);
- $mode = MODE_RFERROR;
- }
- break;
- case '2':
- sendBaseline($client, $blp, MSG_NOTSENT);;
- $mode = MODE_RFNOTSENT;
- break;
- case '*':
- $action = ACTION_STAR;
- break;
- default:
- ;
- } // switch;
- break;
-
- /*
- Message sent key # to continue
- */
-
- case MODE_RFSENT:
- $client->send(COFF);
- if ($read == '_') {
- if (!empty($pagedata['route1'])) {
- $action = ACTION_GOTO;
- $page = $pagedata['route1'];
- $subpage = 'a';
- } else if ($r = $db->getFrame($service['service_id'],$varient['varient_id'],$page,chr(1+ord($subpage)))) {
- $action = ACTION_GOTO;
- $page = $curpage;
- $subpage = chr(1+ord($subpage));
- } else if (!empty($pagedata['route0'])) {
- $action = ACTION_GOTO;
- $page = $pagedata['route0'];
- $subpage = 'a';
- } else {
- $action = ACTION_GOTO;
- $page = '0';
- $subpage = 'a';
- }
- } else if ($read == '*') {
- $action = ACTION_STAR;
- break;
- }
- break;
-
- /*
- message not sent, key # to continue
- */
- case MODE_RFNOTSENT:
- case MODE_RFERROR:
- $client->send(COFF);
- if ($read == '_') {
- if (!empty($pagedata['route2'])) {
- $action = ACTION_GOTO;
- $page = $pagedata['route2'];
- $subpage = 'a';
- } else if ($r = $db->getFrame($service['service_id'],$varient['varient_id'],$page,chr(1+ord($subpage)))) {
- $action = ACTION_GOTO;
- $page = $curpage;
- $subpage = chr(1+ord($subpage));
- } else if (!empty($pagedata['route0'])) {
- $action = ACTION_GOTO;
- $page = $pagedata['route0'];
- $subpage = 'a';
- } else {
- $action = ACTION_GOTO;
- $page = '0';
- $subpage = 'a';
- }
- } else if ($read == '*') {
- $action = ACTION_STAR;
- break;
- }
- break;
-
- /*
- List of alternate options has been presented
- */
-
- case MODE_WARPTO: // expecting a timewarp selection
- if (isset($alts[$read - 1 ])) {
- $v = $db->getAllVarients($config['service_id'], $alts[$read - 1]['varient_id']);
- if (!empty($v)) {
- $varient = reset($v);
- $page = $curpage;
- $subpage = $cursub;
- $action = ACTION_GOTO;
- break;
- }
- }
- // if wasn't a valid warpto keypress,
- //drop into
-
- /*
- Not currently doing anything special.
- Should look for route keypresses, * commands, etc.
- */
-
- case false: // not currently doing anything in particular
- $cmd = '';
- echo "Was idle\n";
- switch($read){
- case '_': // hash for next subpage
- $action = ACTION_NEXT;
- break;
- case '*': // start a star command!
- $action = ACTION_STAR;
- break;
- case '0': // routing
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- if (isset($pagedata['route' . $read]) && $pagedata['route' . $read] != '*') {
- $action = ACTION_GOTO;
- $page = $pagedata['route' . $read];
- $subpage = 'a';
- break;
- } else {
- sendBaseline($client, $blp, ERR_ROUTE);
- $mode = $action = false;
- }
- break;
- default:
- ;
- } // switch;
- break;
-
-
- /*
- currently accepting baseline imput after a * was received
- */
-
- case MODE_BL: // entering a baseline command
- echo "was waiting for page number\n";
- // if it's a number, continue entry
- if (strpos('0123456789',$read) !== false) { // numeric
- $cmd .= $read;
- $client->send($read);
- $blp++;
- }
- // if we hit a special numeric command, deal with it.
- if ($cmd === '00') { // refresh page
- $client->send(COFF);
- $action = ACTION_RELOAD;
- $cmd = '';
- break;
- }
- if ($cmd === '09') { // reload page
- $client->send(COFF);
- $action = ACTION_GOTO;
- $cmd = '';
- break;
-
- }
- if ($cmd === '02') { // new for emulator
- $client->send(COFF);
- $action = ACTION_INFO;
- $cmd = '';
- break;
- }
- if (($cmd === '01')) { // new for emulator
- $client->send(COFF);
- $timewarp = !$timewarp;
- sendBaseline($client, $blp,
- ( $timewarp ? MSG_TIMEWARP_ON : MSG_TIMEWARP_OFF));
- $cmd = '';
- $action = $mode = false;
- }
- // another star aborts the command.
- if ($read === "*") { // abort command or reset input field.
- $action = false;
- sendBaseline($client, $blp, '');
- $cmd = '';
-
- if ($prevmode == MODE_FIELD) {
- $mode = $prevmode;
- $prevmode = false;
- $client->send(outputPosition($fields[$curfield]['x'],$fields[$curfield]['y']).CON);
- $client->send(str_repeat(' ',$fields[$curfield]['length']));
-// tood reset stored entered text
- $resetpsn = $curfield;
- } else {
- $mode = false;
- }
- break;
- }
- // user hit # to complete request
- if ($read === '_') { // really the # key,
- $client->send(COFF);
- if ($cmd === '') { // nothing typed between * and #
- $action = ACTION_BACKUP;
- } else { // *# means go back
- $page = $cmd;
- $subpage = 'a';
- $action = ACTION_GOTO;
- }
- $cmd = ''; // finished with this now
- break;
- }
- break;
-
-
- default:
- echo "not sure what we were doing\n";
- } // switch $mode
- } // something in $read
-
-/*
- This section performs some action if it is deemed necessary
-*/
- if ($action) {
- echo "Performing action $action\n";
- }
- switch($action){
- case ACTION_STAR:
- echo " star command started\n";
- sendBaseline($client, $blp, GREEN . '*', true);
- $client->send(CON);
- $action = false;
- $mode = MODE_BL;
- break;
-
-
-
- case ACTION_SUBMITRF:
- $action = false;
- sendBaseline($client, $bpl, MSG_SENDORNOT);
- $mode = MODE_SUBMITRF;
- break;
-
-
-
-
- case ACTION_BACKUP:
- // do we have anywhere to go?
- if (count($history) > 1) { // because current page should always be in there.
- array_pop($history); // drop current page to reveal previous
- }
- list($page, $subpage) = end($history); // get new last entry,
- echo "Backing up to $page$subpage\n";
- // drop into
- case ACTION_NEXT:
- if ($action == ACTION_NEXT) {
- $cursub = $subpage;
- $subpage = chr(ord($subpage)+1);
- }
- case ACTION_GOTO:
-// $client->send(HOME . UP . GREEN . "Searching for page $page");
-// $blp = 20 + strlenv($page);
- // look for requested page
- $r = $db->getFrame($service['service_id'],$varient['varient_id'],$page,$subpage);
- if (empty($r) && $timewarp) {
- $r = $db->getFrame($service['service_id'],null,$page,$subpage);
- }
- if (empty($r)) {
- echo "Couldn't fetch $page$subpage\n";
- if ($action == ACTION_NEXT) {
- $subpage = $cursub; // put subpage back as it was
- }
- sendBaseline($client, $blp, ERR_PAGE);
- $mode = $action = false;
- break;
- }
- $v = array_merge($varient, array_intersect_key($r, $varient));
-
- $m = $db->getFrameMeta($r['frameunique']);
-
- // set some defaults in case it's an incomplete record
- if (!isset($m['type']) || $m['type'] == ' ') {
- $m['type'] = 'i';
- }
-// return array_merge($pagerecord,$pagemeta);
-
- // validate if we have access top it
-/* if (isset($m['access']) && $m['access'] == 'n') {
- sendBaseline($client, $blp, ERR_PAGE);
- $mode = $action = false;
- break;
- }
- if (isset($m['cug']) && is_numeric($m['cug']) && $m['cug'] && !in_array($m['cug'],$usercugs)) {
- sendBaseline($client, $blp, ERR_PRIVATE);
- $mode = $action = false;
- break;
- }
-*/
-
-
- // we have access...
- if ($r['varient_id'] != $varient['varient_id']) {
- if (empty($v['varient_date'])) {
- sendBaseline($client, $blp, sprintf(MSG_TIMEWARP_TO, 'unknown date') );
- } else {
- sendBaseline($client, $blp, sprintf(MSG_TIMEWARP_TO,date('j f Y',strtotime($v['varient_date']))) );
- }
- $varient = array_merge($varient, array_intersect_key($r, $varient));
- }
- $pagedata = array_merge($r, $m);
- $varient = $v;
- $curpage = $page;
- $cursub = $subpage;
- $cufield = 0;
- $curfp = 0;
- $pageflags = $db->getFrameTypeFlags($pagedata['type']);
-
- if ($action == ACTION_GOTO || $action == ACTION_NEXT) { // only if new location, not going backwards
- $history[] = array($page,$subpage);
- }
- // drop into
- case ACTION_RELOAD:
- //
-/* if ($pageflags['clear']) {
- $output = CLS;
- $blp = 0;
- } else {
- $output = HOME;
- }
-*/
-// print_r($pageflags); print_r($pagedata);
-
- switch($pagedata['type']){
- default:
- case 'i': // standard frame
- if ($timewarp && 1 < count(
- $alts = $db->getAlternateFrames($service['service_id'],$varient['varient_id'],$curpage,$cursub)
- )) {
- $msg = MSG_TIMEWARP;
- } else {
- $msg = '';
- }
-
- $output = getOutput($curpage, $cursub, $pagedata, $pageflags, $msg);
- $blp = strlenv($msg);
- $client->send($output);
- $mode = $action = false;
- break;
- case 'a': // active frame. Prestel uses this for Response Framea.
-
- if ($timewarp && 1 < count(
- $alts = $db->getAlternateFrames($service['service_id'],$varient['varient_id'],$curpage,$cursub)
- )) {
- $msg = MSG_TIMEWARP;
- } else {
- $msg = '';
- }
-
- // this is a glorious hack to fix three out of 30,000 pages but might
- // break lots more.
- $pagedata = str_replace(chr(12),chr(27),$pagedata);
-
- // holds data entered by user.
- $fielddata = array();
-
- $fields = array();
- $output = getOutput($curpage, $cursub, $pagedata, $pageflags, $msg, $user, $fields);
- $blp = strlenv($msg);
- $client->send($output);
-
- if (count($fields)) {
- // need t skip to first field that is..
- // of a field type that is editable
- // or finish.
- $curfield = false;
- for ($i = 0; $i < count($fields); $i++) {
- if (isset($fieldoptions[$fields[$i]['type']]) &&
- $fieldoptions[$fields[$i]['type']]['edit']) {
- $curfield = $i;
- break;
- }
- }
- $resetpsn = $curfield;
- if ($curfield !== false) {
- $mode = MODE_FIELD;
- } else {
- // there were no editable fields.
- $mode = MODE_COMPLETE;
- }
- $curfp = 0;
- }
-
- break;
-
- case 't': // terminate
- $output = getOutput($curpage, $cursub, $pagedata, $pageflags);
- $client->send($output);
- $action = ACTION_TERMINATE;
- break;
-
- } // switch
-
-
- break;
-
-
-
-
- case ACTION_INFO: // special emulator command
- $mode = false;
- $cmd='';
- $action = false;
-
- $output = outputPosition(0,0) . WHITE . NEWBG . RED . 'TIMEWARP INFO FOR Pg.' . BLUE . $curpage . $cursub . WHITE;
- $output .= outputPosition(0,1) . WHITE . NEWBG . BLUE . 'Service : ' . substr($service['service_name'] . str_repeat(' ',27),0,27) ;
- $output .= outputPosition(0,2) . WHITE . NEWBG . BLUE . 'Varient : ' . substr($varient['varient_name'] . str_repeat(' ',27),0,27) ;
- $output .= outputPosition(0,3) . WHITE . NEWBG . BLUE . 'Dated : ' . substr(date('j F Y',strtotime($varient['varient_date'])) . str_repeat(' ',27),0,27);
-
- $alts = $db->getAlternateFrames($service['service_id'],$varient['varient_id'],$curpage,$cursub);
- if (count($alts) > 1) {
- $n = 1;
- $output .= outputPosition(0,4) . WHITE . NEWBG . RED . 'ALTERNATIVE VERSIONS:' . str_repeat(' ',16);
- $y = 5;
- foreach ($alts as $ss){
-// if (is_numeric($ss['varient_date'])) {
- $date = date('d M Y', strtotime($ss['varient_date']));
-// } else {
-// $date = 'unknown';
-// }
- $line = WHITE . NEWBG;
- if ($timewarp) {
- $line .= RED . $n;
- }
- $line .= BLUE . $date . ' ' . $ss['varient_name'];
-
-
- $output .= outputPosition(0,$y) . $line . str_repeat(' ',40-strlenv($line));
- $y++;
- $n++;
-
- }
- if ($timewarp) {
- $mode = MODE_WARPTO;
- }
- }
- $client->send($output);
-
- break;
-
- default:
- ;
- } // switch $action
-
- if ($resetpsn !== false && isset($fields[$resetpsn])) {
- $client->send(outputPosition($fields[$resetpsn]['x'],$fields[$resetpsn]['y']).CON);
- $resetpsn = false;
- }
-
-
- if( $read === null || socket_last_error()) {
- printf( "[%s] Disconnected\n", $client->getaddress() );
- return false;
- }
- }
- $client->close();
- printf( "[%s] Disconnected\n", $client->getaddress() );
-
-}
-
-function strlenv($text){
- return strlen($text) - substr_count($text, ESC);
-}
-
-function sendBaseline($client, &$blp, $text, $reposition = false){
- $client->send(HOME . UP . $text .
- ( $blp > strlenv($text) ? str_repeat(' ',$blp-strlenv($text)) .
- ( $reposition ? HOME . UP . str_repeat(RIGHT, strlenv($text)) : '' )
- : '')
- );
- $blp = strlenv($text);
- return;
-}
-
-function outputPosition($x,$y){
-
- if ($y < 12) {
- if ($x < 21) {
- return HOME . str_repeat(DOWN, $y) . str_repeat(RIGHT, $x);
- } else {
- return HOME . str_repeat(DOWN, $y+1) . str_repeat(LEFT, 40-$x);
- }
- } else {
- if ($x < 21) {
- return HOME . str_repeat(UP, 24-$y) . str_repeat(RIGHT, $x);
- } else {
- return HOME . str_repeat(UP, 24-$y) . str_repeat(LEFT, 40-$x);
- }
-
- }
-}
-
-/*
-
- return a screen output ... $msg sent on baseline just after the cls.
- remember to update $blp manually after calling this.
-
-*/
-
-function getOutput($page, $subpage, $pagedata, $pageflags, $msg = '', $user = array(), &$fields = null, &$frame_content = null) {
- global $blp;
- global $fieldmap;
-
- $price = isset($pagerecord['price']) ? $pagerecord['price'] : 0;
-
- // get textual content.
-
- $text = $pagedata['frame_content'];
-
- if ($pageflags['clear']) {
- $output = CLS;
- } else {
- $output = HOME;
- }
- if ($msg) {
- $output .= UP . $msg . HOME ;
- }
-
- $startline = 0;
- if ($pageflags['ip']) {
- // generate page header (but leave ISP as per frame)
- $header = chr(7) . $page . $subpage;
- $header .= str_repeat(' ', 12-strlenv($header));
- $header .= ($price < 5 ? chr(3) : chr(1)) . substr(" $price",-2) . 'p';
- $text = substr_replace($text,$header, 24, 16);
- } else {
- $startline = 1;
- }
-
- if ($startline) {
- $output .= str_repeat(DOWN, $startline);
- }
- $infield = false;
- $fieldtype = '';
- $fieldlength = '';;
- $fieldx = false;
- $fieldy = false;
- $fieldadrline = 1;
-
- for ($y=$startline; $y<23; $y++ ) {
- for ($x=0; $x<40; $x++) {
- $posn = $y*40+$x;
- $byte = ord($text{$posn})%128;
-
- // check for start-of-field
- if ( $byte == 27 ) { // Esc designates start of field (Esc-K is end of edit)
- $infield = true;
- $fieldtype = ord(substr( $text, $posn + 1, 1))%128;
- $fieldlength = 0;
- $byte = 32; // display a space there.
- } else {
- if ($infield) {
- if ($byte == $fieldtype) {
- $byte = 32; // blank out fields
- if ($fieldx === false) {
- $fieldx = $x;
- $fieldy = $y;
- }
- $fieldlength++;
- // but is it a field that needs filling in?
- if (isset($fieldmap[chr($fieldtype)]) ) {
- $field = $fieldmap[chr($fieldtype)];
- // address field has many lines. increment when hit on first character.
- if ($fieldlength == 1 && strpos($field,'#') !== false) {
- $field = str_replace('#',$fieldadrline,$field);
- $fieldadrline++;
- }
- // user data
-
- if ($field == '%date') {
- $datetime = strtoupper(date('D d M Y H:i:s'));
- if ($fieldlength <= strlen($datetime)) {
- $byte = ord($datetime{$fieldlength-1});
- }
- } else if (isset($user[$field])) {
- if ($fieldlength <= strlen($user[$field])) {
- $byte = ord($user[$field]{$fieldlength-1});
- }
- } /*else // pre-load field contents. PAM or *00 ?
- if (isset($fields[what]['value'])) {
-
- } */
-
- }
-
- } else {
- $infield = false;
-echo "Field at $fieldx, $fieldy type $fieldtype length $fieldlength \n";
- if (is_array($fields)) {
- $fields[] = array('type' => chr($fieldtype), 'length' => $fieldlength,
- 'y' => $fieldy, 'x' => $fieldx);
- }
- $infield = false;
- $fieldx = false;
- }
- }
- }
-
-
- // truncate end of lines
- if ($pageflags['tru'] && substr($text,$y*40+$x,40-$x) === str_repeat(' ',40-$x)) {
- $output .= CR . LF;
- break;
- }
- if ($byte < 32) {
- $output .= ESC . chr($byte+64);
- // echo '^'. chr($byte-64);
- } else {
- $output .= chr($byte);
-//echo "($byte)".chr($byte);
- }
- $text{$posn} = $byte;
- }
-//echo "\n";
- }
-
- // if we were asked to return the frame content, do so, but modified with any fields
- // that were filled in (or blanked)
- if (!is_null($frame_content)) {
- $frame_content = $text;
- }
- return $output;
-
-
-}
-
-
-
-
-require "sock/SocketServer.php";
-
-
-
-$server = new \Sock\SocketServer($config['port'], "0.0.0.0");
-$server->init();
-$server->setConnectionHandler( 'onConnect' );
-$server->listen();
\ No newline at end of file