We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 12149
    • 12 Posts
    Вопрос. Как сделать так чтобы форма NewsPublisherа выводилась только для авторизованных менеджеров сайта?

    Спасибо.
      • 27724
      • 65 Posts
      В демо -версии модх посмотри как все сделано
      http://opensourcecms.com/index.php?option=com_content&task=view&id=2101

      http://wiki.modxcms.com/index.php/Basic_Blog

      Создать веб-пользователей, группу веб-документов, связать их, веб-пользователей с группами веб-документов.
      В режиме редактирования страницы в админке, в разделе права доступа связать в самом низу указать
      к каким группам документов принадлежит этот документ

        Лечите компьютер от вирусов здесь http://virusinfo.info
        • 12149
        • 12 Posts
        Quote from: smeley at Apr 17, 2008, 08:27 AM

        Создать веб-пользователей, группу веб-документов, связать их, веб-пользователей с группами веб-документов.
        В режиме редактирования страницы в админке, в разделе права доступа связать в самом низу указать

        Спасибо! С Web-пользователями разобрался.
        А как сделать чтобы NewsPublisher выводил форму для manager без дополнительной авторизации его как web-пользователя?
        То есть, чтоб manager вошел в админку (frontend) и для него (только для него) вывелась форма для добавления новостей.
          • 27724
          • 65 Posts
          Предполагаю надо написать доп.модуль
            Лечите компьютер от вирусов здесь http://virusinfo.info
            • 6871
            • 13 Posts
            Предполагаю не модуль, а плагин http://modxcms.com/Web2Manager-828.html
              • 12149
              • 12 Posts
              Quote from: Dead_Pingwin at Apr 17, 2008, 04:07 PM

              Предполагаю не модуль, а плагин http://modxcms.com/Web2Manager-828.html

              Спасибо! Похоже, то что нужно.

              Только не пойму как он работает. Я его установил. Создаю нового менеджера, отмечаю "Select this option to create/synchronise a web user account when saving." (внизу чекбокс), я так понял он должен создать синхронного web-пользователя. Но он его не создает.

              Подскажите, web-пользователя надо создавать самому?
                • 12149
                • 12 Posts
                Выяснил причину.

                Для версии 0.9.6 и выше надо использовать плагин:
                //<?php
                /**
                 *  Manager2Web
                 *  Synchronizes a web user account with a manager user accocunt
                 *  Created by Raymond Irving May, 2005
                 *  Modified to support MODx 0.9.6 by: Eol ([email protected]) 
                 */
                
                function updateWebUser($mngr) {
                /**
                 *  Updates an account
                 */
                 global $modx;
                  $uid = $mngr['username'];
                  // check for existing account
                  $rs = $modx->dbQuery("SELECT * FROM ".$modx->getFullTableName("web_users")." WHERE username='$uid'");
                  $count = $modx->recordCount($rs);
                  $allowed = array("fullname","email","phone","mobilephone","blocked","blockeduntil","blockedafter",
                                   "dob","gender","country","state","zip","fax","photo","comment");
                  $fields = array();
                  foreach($mngr as $key=>$value) {
                    if (in_array($key, $allowed)) {
                      $fields[$key] = $mngr[$key];
                    }
                  }
                  if ($count > 0) {
                    // update existing web account
                    $modx->updIntTableRow($fields, "web_user_attributes", " internalKey='".$web['id']."'");
                    $modx->updIntTableRow(array("password"=>$mngr["password"]), "web_users", " id='".$web["id"]."'");
                    $action = "Updated";
                  } else {
                    // create new account
                    $modx->putIntTableRow(array("username"=>$mngr["username"], "password"=>$mngr["password"]), "web_users");
                    $fields["internalKey"] = mysql_insert_id();
                    $modx->putIntTableRow($fields, "web_user_attributes");
                    $action = "Created";
                    //TODO -o Eol: send admin mail to new webuser
                  }
                  if (isset($action)) {
                    return "$action webuser: [$uid]";
                  } else {
                    return false;
                  }
                }//function updateWebUser
                
                $e = &$modx->Event;
                switch ($e->name) {
                 case "OnUserFormSave":
                  if ($_POST["Manager2Web"]) {
                    $mgruserid = $e->params["id"];
                    $sql = "SELECT mu.username,mu.password, ma.*
                            FROM ".$modx->getFullTableName("manager_users")." mu
                            INNER JOIN ".$modx->getFullTableName("user_attributes")." ma ON ma.internalKey = mu.id
                            WHERE mu.id = '$mgruserid'";
                    $rs = $modx->dbQuery($sql);
                    if (!$rs) {
                      $msg = "Error querying database ".mysql_error();
                      $modx->logEvent(0, 3, $msg, $e->activePlugin);
                    } else {
                      $row = $modx->fetchRow($rs);
                      // update account
                      if ($msg = updateWebUser($row)) {
                        if ($logging) $modx->logEvent(0, 1, $msg, $e->activePlugin);
                      }
                    }
                  }
                 break;
                
                 case "OnUserFormRender":
                  $html = "<div class=\"sectionHeader\">Manager2Web</div>
                 <div class=\"sectionBody\">
                  <input type=\"checkbox\" name=\"Manager2Web\" value=\"1\" checked=\"checked\" />
                  Select this option to create/synchronize a web user account when saving.
                 </div>";
                  $e->output($html);
                 break;
                }
                //?>

                Взято от сюда: http://modxcms.com/forums/index.php?topic=5919

                При этом использовать системные события:

                • OnManagerSaveUser
                • OnUserFormRender
                • OnUserFormSave

                Конфигурация плагина:
                &logging=Info Logging;int;0

                Плагин автоматически создает Web-user при создании менеджера и синхронизирует их.

                Недостаток: не синхронизируются группы пользователей.

                Остался один маленький вопрос. как сделать так чтобы при авторизации менеджера автоматически авторизовался синхронный с ним web-user?