Просмотр поста

.
Koenig
(\/)____o_O____(\/)

ДоХтор, хз

быдлокод (+/-)

<?php

class DocClick {
    
    private $dir = 'data';
    
    private $filename;
    
    private $mtime;
    
    private $clicks = 10;
    
    public function __construct($filename, $args = array()) {
        // def value
        $this->mtime = time() + 60;
        if (!is_dir($this->dir)) {
            mkdir($this->dir, 750, true);
        }
        $this->filename = $filename;
        if (file_exists($this->dir . DIRECTORY_SEPARATOR . $this->filename)) {
            $this->loadData($this->filename);
        } else {
            $this->saveData();
        }
        $this->setArgs($args);
        $this->check();
    }
    
    public function loadData($filename) {
        $data = json_decode(file_get_contents($this->dir . DIRECTORY_SEPARATOR . $filename), true);
        $this->filename = $filename;
        $this->clicks = $data['clicks'];
        $this->mtime = $data['mtime'];
    }
    
    public function saveData() {
        $data = array('clicks' => $this->clicks, 'mtime' => $this->mtime);
        file_put_contents($this->dir . DIRECTORY_SEPARATOR . $this->filename, json_encode($data));
    }
    
    public function setArgs($args) {
        if (isset($args['filename'])) {
            $this->filename = $args['filename'];
        }
        if (isset($args['days'])) {
            $this->mtime = $this->setMtime($args['days']);
        }
        if (isset($args['clicks'])) {
            $this->clicks = $this->setClicks($args['clicks']);
        }
    }
    
    public function setFilename($filename) {
        $this->filename = $filename;
    }
    
    public function setMtime($days) {
        $this->mtime = time() + 3600 * 24 * $days;
    }
    
    public function setClicks($clicks) {
        $this->clicks = $clicks;
    }
   
    public function getLink($linkname) {
        return ($this->mtime >= time() && $this->clicks > 0 ? '<div><a href="?docclick='. $this->filename . '">'. $linkname .'</a> ('. $this->clicks .')</div>' : $linkname . '(' . $this->clicks . ')');
    }
    
    public function check() {
        if (isset($_GET['docclick'])) {
            $this->loadData($_GET['docclick']);
            $this->clicks -= 1;
            $this->saveData();
            header('Location: ' . $_SERVER['HTTP_REFERER']);
            exit;
        }  
    }
}

ob_start();

$obj = new DocClick('test.txt');
$obj->saveData();
$obj2 = new DocClick('test2.txt');
$obj2->saveData();

echo $obj->getLink('test');

echo $obj2->getLink('test2');