Jak řešit prvnotní přihlášení uživatele (vytvořit adresář a kategorii)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
TheNEoo
Člen | 75
+
0
-

Ahoj,
jedná se mi o to, jestli jedu správným směrem a nebo dělám blbost.
Myslím že to ale půjde nějak lépe.

Uživatel se nově zaregistruje a teď co se má stát a co se stane:)

Vygeneruju jméno adresáře uživatele pro fotogalerii a uložim do DB, + uložím další informace, jako je heslo, email, atd (nepodstatné).

Tak teď potřebuji adresář který se vygeneroval vytvořit. Mám to řešené tak, že vždy když uživatel přijde do fotogalerie, tak kontroluju jestli má adresář, viz kód:

protected function startup() {
    // má uživatel adresář? pokud ne, vytvoř jej.
    if (!$this->findUserDir()) {
        $userDir = $this->getUser()->getIdentity()->getData();
        $path = $this->context->params['wwwDir'] . $this->ds . 'fotogalerie' . $this->ds;

       //pole $userDir nese v sobě vygenerované jméno adresáře (vráceno identitou)
        mkdir($path.$userDir['user_dir'], 0666); // vytvori adresar
        mkdir($path.$userDir['user_dir']. $this->ds .'thumbs', 0666); //vytvoří podadresář v uživatelově adresáři
    }

    parent::startup();
}

private $ds = DIRECTORY_SEPARATOR;

protected function findUserDir() {
    $userDir = $this->getUser()->getIdentity()->getData();
    $path = $this->context->params['wwwDir'] . $this->ds . 'fotogalerie' . $this->ds;
    foreach (Finder::findDirectories($userDir['user_dir'])->from($path) as $dir) {
        if ($dir) {
            return true;
        } else {
            return false;
        }
    }
}

Toto řešení se mi zdá velmi nepraktické, protože se kontrola adresáře provádí vždy, když uživatel pracuje s galerií. Při vetším počtu userů velká zátěž na server ?

Napadlo mě, že když se uživatel poprvé registruje či se poprvé přihlašuje, uložit do db a načíst si do identity něco ve smyslu (nova_registrace). Pokud bude nová registrace 0, uživatel již má vytvořen adresář i kategorii. Pokud bude 1, vytvořit adresař a kategorii, + v db změnit nova_registrace na 0. Při tomto řešení ale vzníká problém, že uživatele musim při prvnim přihlášení odhlásit, aby se následná změna sloupce nova_registrace načetla nově do identity uživatele.

To samé se týká kategorie, kterou bych mu taktéž rád vytvořil, jenže zde zase nejdříve musí být provedeno odhlášení. Ten samí případ jako s adresářem

Jak takový problém řešíte ? Stačí jen mě popostrčit spravným směrem :)

Oli
Člen | 1215
+
0
-

Ja tohle testuju vzdy. Kdyz chci pracovat s adresarem, tak praci s nim zavru do if(is_dir($folder)){}. V tvem pripade, bych vytvarel adresar v else toho ifu.

Ted me tak napad, jestli by nebylo lepsi to zavrit do try catch… To ale nejsem schopnej posoudit. Tak jako tak si myslim, ze by sis nemel dovolit tise predpokladat, ze adresar nebo soubor existuje ;-)

Btw. podle me zbytecne dvakrat vytvaris $userDir a $path.

TheNEoo
Člen | 75
+
0
-

Oli napsal(a):

Ja tohle testuju vzdy. Kdyz chci pracovat s adresarem, tak praci s nim zavru do if(is_dir($folder){}. V tvem pripade, bych vytvarel adresar v else toho ifu.

Ted me tak napad, jestli by nebylo lepsi to zavrit do try catch… To ale nejsem schopnej posoudit. Tak jako tak si myslim, ze by sis nemel dovolit tise predpokladat, ze adresar nebo soubor existuje ;-)

Btw. podle me zbytecne dvakrat vytvaris $userDir a $path.

Tak to je docela pěkné if(is_dir($folder). To mě vůbec nenapadlo. Tím odpadá celá funkce jestli existuje adresář

Btw. podle me zbytecne dvakrat vytvaris $userDir a $path.

jj to máš pravdu. zrušeno

Editoval TheNEoo (25. 8. 2013 11:53)

vvoody
Člen | 910
+
0
-

Prečo by mali byť obrázky/galérie závislé od adresára usera. Predstav si ze v budúcnosti budeš implementovať funkciu presunu galérie medzi usermi. Presúvať fotku po fotke z jedného adresára do druhého? Trochu uletené nie? :D Fotka by mala mať v db id usera, respektíve id galérie a galéria zase id usera.

TheNEoo
Člen | 75
+
0
-

vvoody napsal(a):

Prečo by mali byť obrázky/galérie závislé od adresára usera. Predstav si ze v budúcnosti budeš implementovať funkciu presunu galérie medzi usermi. Presúvať fotku po fotke z jedného adresára do druhého? Trochu uletené nie? :D Fotka by mala mať v db id usera, respektíve id galérie a galéria zase id usera.

mam za to že o čem mluvíš že to tak mam.

u fotky je vždy id (uid) uživatele kam patří + do které kategorie patří (cat_id) (v tabulce pro fotky)

Oli
Člen | 1215
+
0
-

TheNEoo: Nebylo by lepší uvést user_id v kategorii místo fotek? Něco jako:

user: name, email, password, ...
gallery: name, folder, user_id, ...
photo: filename, gallery_id, ...

Tím by jsi se vyhnul opakování stejných hodnot pro spoustu záznamů a i mě to přijde lepší při dotazování na db…

TheNEoo
Člen | 75
+
0
-

Oli napsal(a):

TheNEoo: Nebylo by lepší uvést user_id v kategorii místo fotek? Něco jako:

user: name, email, password, ...
gallery: name, folder, user_id, ...
photo: filename, gallery_id, ...

Tím by jsi se vyhnul opakování stejných hodnot pro spoustu záznamů a i mě to přijde lepší při dotazování na db…

moje struktura

user: name, email, folder
kategorie: name, parent, user_id
fotky: name, filename, cat_id, user_id

Pořád mi něco uniká co mi chcete říct.

TheNEoo
Člen | 75
+
0
-

TheNEoo napsal(a):

Oli napsal(a):

TheNEoo: Nebylo by lepší uvést user_id v kategorii místo fotek? Něco jako:

user: name, email, password, ...
gallery: name, folder, user_id, ...
photo: filename, gallery_id, ...

Tím by jsi se vyhnul opakování stejných hodnot pro spoustu záznamů a i mě to přijde lepší při dotazování na db…

moje struktura

user: name, email, folder
kategorie: name, parent, user_id
fotky: name, filename, cat_id, user_id

Pořád mi něco uniká co mi chcete říct.

návaznosti v apce samotný

  • přidat článek
  • nadpis
  • vybrat kategorii (cat_id)
  • kategorie
  • nadpis
  • parent (cat_id)
  • fotky
  • nazev
  • vybrat kategorii (cat_id)

struktura kategorii
Nekategorizováno
–Fotogalerie
–Články

Takto mám pro uživatele jednotné kategorie.
Jestli chápu tak mam pro fotogalerii udělat vlastní kategorie.

Editoval TheNEoo (25. 8. 2013 12:32)

Oli
Člen | 1215
+
0
-

aha, ty to nazyvas kategorie, ja galerie. Jinak to je asi stejne… Myšlenka byla asi taková, že jestliže náleží kategorie uživateli a fotka kategorii, tak se na uživatele zeptáš pokud znáš fotku. Něco jako:

$photo->category->user->email.

Ale databázím zase tak nerozumím, jen si myslím, že to je nadbytečný údaj, který můžeš zjistit jinak…