<?php
/**
 * Zkratkova jmena pro aktualni dokumenty
 *
 * @author petr
 */
class Application_Model_DocumentsShortcuts extends Zend_Db_Table_Abstract {
    /**
     * UUID dokumentu
     *
     * @var string
     */
    protected $_uuid;

    /**
     * zkratkovy retezec
     *
     * @var string
     */
    protected $_shortcut;

    /**
     * jmeno tabulky v databazi
     *
     * @var string
     */
    protected $_name = "documents_shortcuts";

    /**
     * sloupec primarniho klice
     *
     * @var string
     */
    protected $_primary = "uuid";

    /**
     * indikace auto_increment
     *
     * @var bool
     */
    protected $_sequence = false;

    /**
     * reference na rodicovske tabulky
     *
     * @var array
     */
    protected $_referenceMap = array(
        "document" => array(
            "columns" => "uuid",
            "refTableClass" => "Application_Model_Documents",
            "refColumns" => "uuid"
        )
    );

    /**
     * vygeneruje zkratku a vraci jeji objekt
     *
     * @return Zend_Db_Table_Row
     */
    public function generateShortcut($uuid) {
	//inicializace prazdne zkratky
	$shortCut = "";
	
	//inicializace generatoru nahodnych cisel
	srand(time() + microtime(false));

	//generovani zkratky, odkud zkoumana zkratka existuje
	do {
		//volna zkratka zatim nebyla nalezena
		
		//hashovani stare zkratky spolu s UUID dokumentu
	    $shortCut = sha1($shortCut.$uuid);
	    
	    //nahodny vyber sedmi znaku, ktere se stanou zkratkou
	    $startChar = rand(0, 33);
	    $shortCut = substr($shortCut, $startChar, 7);

	    //kontrola, jeslti je zkratka vyuzivana
	    $row = $this->fetchRow($this->select(false)
		    ->where("shortcut like ?", $shortCut));
	} while ($row);

	//vytvoreni radku nove zkratky
	$row = $this->createRow(array(
	    "uuid" => $uuid,
	    "shortcut" => $shortCut
	));

	//uozeni radku zkratky
	$row->save();

	//vraceni objektu se radkem zkratky
	return $row;
    }
}
?>
