argument('file')); foreach ($pkt->messages as $o) { switch ($o->type()) { case 'echomail': $date = Carbon::createFromFormat('d M y H:i:s',$o->date,($o->tzutc >= 0 ? '+' : '').substr_replace($o->tzutc,':',2,0)); // See if we already have this message. $eo = Echomail::firstOrNew([ 'date'=>$date, 'from_ftn'=>$this->get_node($o->fz,$o->fn,$o->ff,$o->fp)->id, 'msgid'=>$o->msgid, ]); if (md5(utf8_decode($eo->message)) == md5($o->message)) { $this->warn(sprintf('Duplicate message: %s@%s with id: %s',$o->from,$o->fqfa,$o->msgid)); continue; } $eo->pkt_from = $this->get_node($pkt->sz,$pkt->sn,$pkt->sf,$pkt->sp)->id; $eo->pkt_to = $this->get_node($pkt->dz,$pkt->dn,$pkt->df,$pkt->dp)->id; $eo->pkt = $pkt->filename; $eo->pkt_date = $pkt->date; $eo->flags = $o->flags; $eo->cost = $o->cost; $eo->from_user = utf8_encode($o->from); $eo->to_user = utf8_encode($o->to); $eo->subject = utf8_encode($o->subject); $eo->tz = $o->tzutc; $eo->area = $o->echoarea; $eo->replyid = $o->replyid; $eo->message = utf8_encode($o->message); $eo->origin = utf8_encode($o->origin); //$eo->original = (string)$o; $eo->save(); foreach ($o->kludge as $k=>$v) { $eo->kludges()->attach($k,['value'=>json_encode($v)]); } foreach ($o->unknown as $v) { $eo->kludges()->attach('UNKNOWN',['value'=>json_encode($v)]); } foreach ($o->seenby as $v) { foreach ($this->parse_nodes(Zone::findOrFail($pkt->sz),$v) as $no) { $eo->seenbys()->attach($no->id); } } $seq = 0; foreach ($o->path as $v) { foreach ($this->parse_nodes(Zone::findOrFail($pkt->sz),$v) as $no) { $eo->paths()->attach($no->id,['sequence'=>$seq++]); } } break; case 'netmail': $date = Carbon::createFromFormat('d M y H:i:s',$o->date,($o->tzutc >= 0 ? '+' : '').substr_replace($o->tzutc,':',2,0)); // See if we already have this message. $no = Netmail::firstOrNew([ 'date'=>$date, 'from_ftn'=>$this->get_node($o->fz,$o->fn,$o->ff,$o->fp)->id, 'msgid'=>$o->msgid, ]); if (md5(utf8_decode($no->message)) == md5($o->message)) { $this->warn(sprintf('Duplicate message: %s@%s with id: %s',$o->from,$o->fqfa,$o->msgid)); //continue; } $no->pkt_from = $this->get_node($pkt->sz,$pkt->sn,$pkt->sf,$pkt->sp)->id; $no->pkt_to = $this->get_node($pkt->dz,$pkt->dn,$pkt->df,$pkt->dp)->id; $no->pkt = $pkt->filename; $no->pkt_date = $pkt->date; $no->flags = $o->flags; $no->cost = $o->cost; $no->from_user = utf8_encode($o->from); $no->to_user = utf8_encode($o->to); $no->to_ftn = $this->get_node($o->tz,$o->tn,$o->tf,$o->tp)->id; $no->subject = utf8_encode($o->subject); $no->tz = $o->tzutc; $no->replyid = $o->replyid; $no->message = utf8_encode($o->message); $no->origin = utf8_encode($o->origin); $no->save(); foreach ($o->kludge as $k=>$v) { $no->kludges()->attach($k,['value'=>json_encode($v)]); } foreach ($o->unknown as $v) { $no->kludges()->attach('UNKNOWN',['value'=>json_encode($v)]); } $seq = 0; foreach ($o->via as $v) { dump($v); $data = preg_split('/\s/',$v); $ftno = $this->parse_znfp_domain($data[0]); unset($data[0]); $no->paths()->attach($ftno->id,['sequence'=>$seq++,'value'=>json_encode($data)]); } break; default: abort(500,'Unknown type: '.$o->type()); } } } }