Genau ein Item pro Mitglied

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • izanagi
    Contao-Fan
    • 19.01.2011
    • 595

    #31
    Ah, dann reicht also die Anwesenheit des userid fields im edit formular, dass du nur die eigenen bearbeiten kannst? Haste mal nen test gemacht? GET von nem verbotenen in die URL geschrieben?
    Also bei mir ja. Gewundert habe ich mich darüber auch. Es ist ja nichts anderes als ein Hidden Field im Formular mit der userid. Aber bei mir reicht es.
    Wenn ich den benutzernamen eines anderen als Parameter mitgebe ist die Edit gesperrt.

    Ich hatte mal einen ähnlichen Fall mit dem Auflistungs-Modul. Dort hat FIND_IN_SET partout nicht funktioniert mit einem Inserttag, aber mit IN.
    Also hier:
    xyzbenutzerid IN ({{user::id}})
    Schade, geht bei mir nicht
    Design,Web,Videos und Games - universal-industries

    Kommentar

    • Alexander
      Contao-Fan
      • 02.08.2009
      • 639

      #32
      So servus Leute,

      besten Dank, dass ihr euch hier so rege beteiligt habe!
      Also will ich nun mal der Reihe nach antworten - früher ging es leider nie so richtig mit dem Antworten, weil ich die Woche über sehr eingespannt war.

      @Andreas
      Das Problem war - beschämenderweise -, dass ich einfach nur das falsche Template ausgesucht hatte. Ich hätte catalog_edit nehmen müssen, hatte aber catalog_full drin - logisch, dass da nix kam, weil dieses Template natürlich nichts dergleichen vorsieht.

      @izanagi
      catalogeditsingleown hat bei mir leider nicht funktioniert, darum kann ich dazu nichts beitragen.
      Ich habe mich nun an deiner anschaulichen Auflistung entlang gehangelt und bin auch zum Ziel gekommen.
      Folgende Konfiguration habe ich nun gewählt:

      Auf der Listenseite habe ich "Katalog-Liste" eingebunden mit den folgenden Einstellungen:
      Weiterleitungsseite: Bearbeitungsseite (mit "Katalog-Bearbeiten"-Modul)
      • Sichtbare Felder: Userid-Feld (und andere, wenn man mag)
      • Bedingung: ID-User-Feld={{user::id}}
      • Bearbeitung aktivieren: Angehakt
      • Katalog-Layout: catalog_simple (sicherlich egal, was man hier nimmt oder?)

      @alle
      Mein nun noch verbleibendes Problem ist, dass auf der Bearbeitungs-Seite der FE-User dann zwar schön nur seinen Eintrag ausgegeben bekommt (durch ändern der Domain kommt er übrigens auch auf keine anderen Einträge; also items/1.html zu items/2.html obwohl es User-ID 2 auch gibt inkl. Katalogeintrag). Allerdings ist nun das Problem in der Bearbeitung, dass er unter seinen Textfeldern, etc. drei Optionen hat:
      - Speichern
      - Speichern und Schließen
      - Speichern und Neu

      Insbesondere die dritte Option soll ihm natürlich nicht zur Verfügung stehen. Ich habe nun einfach aus der catalog_edit rausgelöscht. Nun sind die input-submits natürlich weg. Besteht trotzdem für den User noch eine Möglichkeit, einen neuen Eintrag aus dem FE anzulegen?

      Vielen, vielen Dank an alle, die mir mitgeschrieben haben - ihr habt mir wunderbar geholfen :-).

      Beste Grüße
      Alexander
      ‎"The basic drives of humans are few: to get enough food, to find shelter, and to keep debt off the balance sheet."

      Kommentar

      • Andreas
        Contao-Urgestein
        • 19.06.2009
        • 7709

        #33
        items/2.html bedeutet - Datensatz mit der ID 2 aus der Tabelle, nicht Datensatz, bei dem das useridfield auf die 2 verweist.

        Zu dem anderen Problem kann ich nichts sagen. Gibt das Listenmodul, in welchem du ja die FE-Bearbeitung aktivierst, nicht schon einen Link aus 'neuen Datensatz erstellen'? Wenn ja, brauchst du ihn ja nur anzubieten, wenn die Liste noch keinen Eintrag ausgibt.
        Bitte!
        Vor Anfragen im Forum HTML validieren.
        Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

        Vielen Dank an alle Wunschlistenerfüller
        Andreas Burg, Web Solutions

        Kommentar

        • izanagi
          Contao-Fan
          • 19.01.2011
          • 595

          #34
          Hi Alex gut das du das ansprichst, hab ich auch gerade probiert... natürlich kann man aus /editseite/items/username.html einfach /editseite.html machen und schon könnte der einen neuen Eintrag erstellen.
          Das muss man dann noch im Template verbieten.

          Ach stimmt, wenn man einen falschen Namen oder ID in die URL gibt dann kann man ebenfalls einen neuen EIntrag erstellen. Das ist natürlich doof.
          Zuletzt geändert von izanagi; 21.07.2012, 19:42.
          Design,Web,Videos und Games - universal-industries

          Kommentar

          • Alexander
            Contao-Fan
            • 02.08.2009
            • 639

            #35
            Servus!

            Also wenn ich aus


            mache und währenddessen mit dem Benutzer mit User-ID "1" eingeloggt bin, kommt auf der ersten Seite die normale und korrekte Bearbeitung. Auf der zweiten Seite kommt hingegen dann die folgende Meldung:
            Sie haben keine Berechtigung, diesen Eintrag zu bearbeiten.

            Das läuft ja eigentlich wie gewollt.
            Gibt es denn nun eine Möglichkeit für den Nutzer einen neuen Eintrag zu erstellen? Das wollte ich durch löschen der inputs aus dem Template unterbinden. Kann er das irgendwie anders auch "triggern"?

            Beste Grüße
            Alexander
            ‎"The basic drives of humans are few: to get enough food, to find shelter, and to keep debt off the balance sheet."

            Kommentar

            • izanagi
              Contao-Fan
              • 19.01.2011
              • 595

              #36
              Hi, ja das meinte ich ja vorhin.

              Wenn du nun aus http://domain.de/bearbeitung/items/1.html
              einfach http://domain.de/bearbeitung.html machst dann könnte der jenige ein neues anlegen.
              Ich arbeite gerad an einer Lösung. Ich muss aber auch weg... ich kann erst morgen weiter machen

              Nur die Buttons rausnehmen das reicht leider nicht.
              Design,Web,Videos und Games - universal-industries

              Kommentar

              • izanagi
                Contao-Fan
                • 19.01.2011
                • 595

                #37
                Ich habe nur kurz eine Lösung gebaut, jedoch nicht Updatesicher.
                Die Datei ModuleCatalogEdit.php modifizieren:

                Der Code in Zeile 468 bis 483

                PHP-Code:
                        // if no item, then check if add allowed and then show add form
                        if (!$objCatalog || $objCatalog->numRows < 1 )
                        {
                            $blnModeAdd = true;
                            // Load defaults.
                            $arrValues = array();
                        }
                        else
                        {
                            // check if editing of this record is disabled for frontend.
                            foreach ($this->catalog_edit as $key=>$field)
                            {
                                if(!$this->editRecordAllowed($field, $this->objDCEdit->activeRecord))
                                    return;
                            }
                        } 
                

                muss ausgetauscht werden mit

                PHP-Code:
                        // ########### Prüfen ob User in einer bestimmten Gruppe ist ##########################
                        $this->import('FrontendUser','user');
                        $user_id = $this->user->id;  
                        $this->import('FrontendUser', 'Member');
                        $memberGroups = $this->Member->groups;
                        $pflichtgruppe = 21; // Mitglieder dieser Gruppe haben keine Befugnis
                        if (!in_array($pflichtgruppe, $memberGroups )){
                            $denied = true;
                        } else{
                            $denied = false;
                        }
                        
                        // if no item, then check if add allowed and then show add form
                        if ($denied == true && (!$objCatalog || $objCatalog->numRows < 1))
                        {
                            return false;
                        }elseif (!$objCatalog || $objCatalog->numRows < 1 )
                        {
                            $blnModeAdd = true;
                            // Load defaults.
                            $arrValues = array();
                        }
                        else
                        {
                            // check if editing of this record is disabled for frontend.
                            foreach ($this->catalog_edit as $key=>$field)
                            {
                                if(!$this->editRecordAllowed($field, $this->objDCEdit->activeRecord))
                                    return;
                            }
                        } 
                
                Wenn der User sich neu registriert kommt er in die Mitgliedergruppe "neuling" , bei mir die ID 21
                der Variable Pflichtgruppe gebe ich jetzt die Mitgliedergruppen ID 21
                Somit dürfen nur User in dieser Gruppe ein neues erstellen und kann keinen zweiten erstellen. Du musst natürlich dem jenigen die Gruppe wieder entziehen wenn er eins erstellt.
                Sprich sobald er eines erstellt hat, ist er kein Neuling mehr und gehört nicht mehr zur Gruppe 21
                Du muss nur noch eine Fehlermeldung generieren, ich muss jetzt leider echt weg.
                Design,Web,Videos und Games - universal-industries

                Kommentar

                • Andreas
                  Contao-Urgestein
                  • 19.06.2009
                  • 7709

                  #38
                  Das scheint mir viel zu kompliziert. Du brauchst doch nur in der DB-Tabelle nachzusehen, ob der User schon einen Eintrag hat.
                  PHP-Code:
                  $this->import('Database');
                  
                  $objData = $this->Database->prepare("SELECT * FROM cat_meinKatalog WHERE meinMemberIdFeld=?")
                                ->limit(1)
                                ->execute($this->User->id);
                  
                  if ($objData->numRows > 0)
                  {
                    echo 'du hast schon';
                  } 
                  
                  Bitte!
                  Vor Anfragen im Forum HTML validieren.
                  Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

                  Vielen Dank an alle Wunschlistenerfüller
                  Andreas Burg, Web Solutions

                  Kommentar

                  • Alexander
                    Contao-Fan
                    • 02.08.2009
                    • 639

                    #39
                    Einen wunderbaren Sonntagmorgen,

                    besten Dank für eure beiden Lösungsvorschläge!

                    @iznagi
                    Das ist sicherlich eine schön zugeschnittene Lösung, die - wenn sie sauber klappt - ziemlich elegant ist (über Gruppen etc.).
                    Allerdings verwende ich leider nicht dein Gruppen-Berechtigungskonzept und nutze das schon für andere Zwecke. Trotzdem vielen Dank für diesen Vorschlag, welcher sicherlich anderen Usern hier sicher helfen wird.

                    @Andreas
                    Das klingt perfekt, dass man das quasi einfach nur rausfiltern kann. Kanst du mir das etwas detaillierter ausführen, da meine Kenntnisse wieder nicht genug in die Contao-Struktur reinreichen und auch in PHP im Allgemeinen, um das umzusetzen. Das würde mir wirklich helfen, weil man ja dann sogar ein Zwei-Stufen-Konzept fahren könnte:

                    Anlegeseite:
                    Katalog-Bearbeiten-Modul mit Anlegefunktion, die nicht geblockt ist (Zugang zur Seite wird über deine Kontrolle gefiltert)
                    Bearbeitungsseite:
                    Katalog-Bearbeiten-Modul ohne Anlegefunktion, die entesprechend geblockt ist (Zugang zur Seite wird über deine Kontrolle gefiltert; Zugang nur, wenn bereits ein Eintrag angelegt ist mit seiner User-ID)

                    Das würde sicherlich einiges erleichtern oder? Wäre ein vollautomatischer Frontend-Workflow dann :-).

                    Beste Grüße
                    Alexander
                    Zuletzt geändert von Alexander; 22.07.2012, 14:46.
                    ‎"The basic drives of humans are few: to get enough food, to find shelter, and to keep debt off the balance sheet."

                    Kommentar

                    • Alexander
                      Contao-Fan
                      • 02.08.2009
                      • 639

                      #40
                      Also, ich habe es nun so versucht, die Eintrags-Anlage nur einmal zu ermöglichen:

                      catalog_edit.html5:
                      Code:
                      <?php $this->import('Database');
                      $objData = $this->Database->prepare("SELECT * FROM cat_testkatalog WHERE id_user_fe=?")
                                    ->limit(1)
                                    ->execute($this->User->id);
                      ?>
                      
                      <?php if ($objData->numRows > 0) : ?>
                      <p>No further Editing allowed.</p>
                      
                      <?php else : ?>
                      
                      <form action="<?php echo $this->action; ?>" id="<?php echo $this->formId; ?>" method="post" enctype="<?php echo $this->enctype; ?>">
                      <div class="formbody">
                      <input type="hidden" name="FORM_SUBMIT" value="<?php echo $this->formId; ?>">
                      <input type="hidden" name="REQUEST_TOKEN" value="{{request_token}}">
                      <table cellspacing="0" cellpadding="0" summary="Table holds form input fields">
                      <?php echo $this->field; ?>
                        <tr class="<?php echo $this->rowLast; ?>">
                          <td class="col_0 col_first">&nbsp;</td>
                          <td class="col_1 col_last">
                            <div class="submit_container">
                      <input type="submit" name="saveNclose" id="saveNclose" class="tl_submit" accesskey="c" value="<?php echo specialchars($GLOBALS['TL_LANG']['MSC']['saveNclose']); ?>">
                            </div>
                          </td>
                        </tr>
                      </table>
                      </div>
                      </form>
                      
                      <?php endif; ?>
                      Wahrscheinlich reichen meine Kenntnisse hier nicht, um es richtig anzubringen, da sowohl FE-User, die bislang keinen Eintrag im gewählten Katalog haben, als auch User, die dort bereits einen haben, das Formular angezeigt bekommen.

                      Beste Grüße
                      Alex
                      ‎"The basic drives of humans are few: to get enough food, to find shelter, and to keep debt off the balance sheet."

                      Kommentar

                      • Andreas
                        Contao-Urgestein
                        • 19.06.2009
                        • 7709

                        #41
                        So kann ich da keinen Fehler sehen. Trage mal zum Test bei $this->User->id eine bekannte User-ID ein
                        PHP-Code:
                        ->execute(2); 
                        
                        Bei dir wird numRows nicht größer als 0, was besagt, dass kein Eintrag gefunden wird. Evtl. musst du noch User importieren.
                        PHP-Code:
                        $this->import('FrontendUser', 'User'); 
                        
                        Teste mal mit
                        PHP-Code:
                        print_r($this->User->id); 
                        
                        , ob da was ankommt. Schalte auch die Fehlermeldungen ein, damit du was siehst, wenn etwas nicht stimmt.
                        Bitte!
                        Vor Anfragen im Forum HTML validieren.
                        Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

                        Vielen Dank an alle Wunschlistenerfüller
                        Andreas Burg, Web Solutions

                        Kommentar

                        • izanagi
                          Contao-Fan
                          • 19.01.2011
                          • 595

                          #42
                          @Andreas
                          ja es ist in der Tat etwas komplizierter aber es hat den Hintergrund das ich meinen Eintrag editieren kann, nur keinen neuen mehr erstellen kann.
                          Das kann man mit deiner Methode dann leider nicht.

                          ps: die edit php benutzt nämlich sowohl für die Editierfunktion als auch für die Neues Item Funktion die selbe Datei.
                          Das war auch der Wunsch von ihm , eine Anlegeseite und Editierseite
                          Zuletzt geändert von izanagi; 22.07.2012, 21:17.
                          Design,Web,Videos und Games - universal-industries

                          Kommentar

                          • Alexander
                            Contao-Fan
                            • 02.08.2009
                            • 639

                            #43
                            Hi Andreas,

                            vielen Dank für deine Antwort. Entschuldige bitte meine lange Reaktionszeit.
                            Kannst du mir deine Tipps im Template-Gesamtkontext erklären? Also eingeabreitet in mein Temaplate von Seite 1, ganz unten.
                            Komme so nicht weiter leider.

                            Besten Dank und viele Grüße
                            Alex
                            ‎"The basic drives of humans are few: to get enough food, to find shelter, and to keep debt off the balance sheet."

                            Kommentar

                            Lädt...