Сделать страницы заказа доступными для пользователя с правами администратор

Всем привет.
Имеется задача сделать страницы заказа, например: /checkout?msorder=17 доступными для пользователя с правами администратор.
Т.к. что бы можно было смотреть заказ с фронта, не заходя в админку.
Оформленный заказ вывожу так:
[[!msGetOrder? &tpl=`tpl-get-order`]]
Может кто сталкивался с этим, как сделать?
Сергей
22 января 2021, 22:35
modx.pro
305
0

Комментарии: 11

Артур
23 января 2021, 00:18
0
[[+modx.user.id:ismember=`Administrator`:then=`
[[!msGetOrder? &tpl=`tpl-get-order`]]
`:else=`Доступ запрещён`]]
    Сергей
    23 января 2021, 10:31
    0
    Не то, это мы просто показываем доступ запрещен, если не админ.
    А нужно иметь возможность админу смотреть заказы других пользователей, переходя по ссылке
      Артур
      23 января 2021, 10:37
      0
      А этот код что делает?
      [[!msGetOrder? &tpl=`tpl-get-order`]]
        Сергей
        23 января 2021, 10:40
        0
        Показывает успешно оформленный заказ после оформления заказа
    Андрей
    23 января 2021, 02:09
    0
    Либо написать свой сниппет для выборки заказов, либо править msGetOrder, там есть проверка вывода по id юзера, и админу чужие заказы не покажет.
      Сергей
      23 января 2021, 10:45
      0
      В сниппете msGetOrder, за показ информации отвечает вот эта конструкция:
      $canView = (!empty($_SESSION['minishop2']['orders']) && in_array($id, $_SESSION['minishop2']['orders'])) ||
          $order->get('user_id') == $modx->user->id || $modx->user->hasSessionContext('mgr') || !empty($scriptProperties['id']);
      if (!$canView) {
          return '';
      }
      Тут, как я понимаю, идет проверка, если ID сессии совпадает с ID пользователя оформившего заказ — показываем,
      Также показываем если пользователь авторизован в адмике.

      Осталось понять как добавить сюда, если пользователь в группе Администраторы
        Артур
        23 января 2021, 10:51
        1
        0
        Править исходники плохо.
        Лучше написать свой сниппет, примерно такой
        $order=$modx->getObject('msOrder', $id);
        //Тут как-то обрабатыааете
        Вызов такой
        [[customGetOrder?id=17]]
        Как в синтаксисе pHx получить get параметр не помню, погуглите, а лучше используйте fenom.
          Сергей
          23 января 2021, 10:53
          0
          Добавил проверку на группу:
          $modx->user->isMember('Administrator')
          Все заработало, как и хотел
            Артур
            23 января 2021, 11:06
            0
            До первого обновления minishop2
          Артур
          23 января 2021, 11:11
          +1
          <?php
          if(!$order_id){return false;}
          $pdoTools = $modx->getService('pdoTools');
          $orderFields = array('id','num', 'createdon', 
                              'updatedon', 'cart_cost', 
                              'delivery_cost', 'comment', 
                              'status', 'cost');
          $orderProductFields = array('id','product_id', 
                                      'name', 'count', 
                                      'price', 'cost', 'options');
                                  
          $addressFields = array('city', 'street',
                                  'receiver', 'phone',
                                  'comment');
          $output = array(
              'meta' => [],
              'address' => [],
              'products' => []
              );
          
          $order = $modx->getObject('msOrder', $order_id);
          if($order){        
              //заполняем массив основных данных заказа
              for($i = 0; $i < count($orderFields); $i++){
                  $output['meta'][$orderFields[$i]] = $order->get($orderFields[$i]); 
              }
              
              //вычисляем срок выполнения заказа
              $output['meta']['duration'] = ceil($output['meta']['cost'] / $modx->getOption('base_cost'));
                      
              //заполняем адрес и дополнительные данные
              $address = $order->getOne('Address');
              $properties = $address->get('properties');
              for($i = 0; $i < count($addressFields); $i++){
                  if($addressFields[$i] != 'properties'){
                      $output['address'][$addressFields[$i]] = $address->get($addressFields[$i]); 
                  }else{
                      foreach($properties as $name => $prop){
                          $output['address'][$name] = $prop; 
                      }
                  }
              }
              //заполняем продукты
              $products = $order->getMany('Products');
              if($products){
                  foreach($products as $key => $product){
                      for($i = 0; $i < count($orderProductFields); $i++){
                          $output['products'][$key][$orderProductFields[$i]] = $product->get($orderProductFields[$i]); 
                      }
                  }  
              }
              
              
              //$modx->log(1, 'OUTPUT getUserOrder ' . print_r($output, 1));
              
              if($tpl){
                  return $pdoTools->getChunk($tpl, $output);
              }
              //$modx->log(1, print_r($output,1));
              return $output;
          }else{
              return false;
          }


          ФРОНТ
          {set $order = '!getOrder' | snippet:[
              'order_id' => $.get.order_id
          ]}
          
          {if $order}
          <p class="h-6"><span class="text-orange">Номер заказа:</span> {$order['meta']['num']}</p>
          <p class="h-6"><span class="text-orange">Дата заказа:</span> {$order['meta']['createdon'] | date: 'd.m.Y H:i:s'}</p>
          <p class="h-6"><span class="text-orange">Имя заказчика:</span> {$order['address']['receiver']}</p>
          {if $_modx->isAuthenticated('mgr') || $.get.admin}
          <p class="h-6"><span class="text-orange">Телефон заказчика:</span> <a class="service-link" href="tel:{$order['address']['phone'] | replace:'-':'' }">{$order['address']['phone'] | replace:'-':'' }</a></p>
          {/if}
          <p class="h-6"><span class="text-orange">Общая стоимость:</span> <span class="jsTotalOrderCost">{$order['meta']['cost']}</span> руб.</p>
          <p class="h-6"><span class="text-orange">Срок выполнения:</span> <span class="jsOrderDuration">{$order['meta']['duration']}</span> дн.</p>
          <p class="h-6 mb-0"><span class="text-orange">Перечень включенных в состав услуг <small class="small">(в стоимость услуг входит стоимость платных дополнений)</small>:</span></p>
              {if $_modx->isAuthenticated('mgr') || $.get.admin}
                  <div class="pl-0" id="productList">
                  {set $i = 1}    
                  {foreach $order['products'] as $key => $product}
                      {set $description = $product['product_id'] | resource: 'desc'}
                      {set $introtext = $product['product_id'] | resource: 'introtext'}
                      {set $add_cost = $product['product_id'] | resource: 'add_cost'}
                      {set $weight = $product['product_id'] | resource: 'weight'}
                      {$_modx->parseChunk('@FILE chunks/shop/editOrderProduct.html', [
                          'description' => $product['options']['desc']?:$description,
                          'introtexxt' => $introtext,
                          'index' => $i,
                          'add_cost' => $add_cost,
                          'price' => $product['price'],
                          'weight' => $weight,
                          'count' => $product['count'],
                          'name' => $product['options']['name']?:$product['name'],
                          'cost' => $product['cost'],
                          'id' => $product['id'],
                          'options' => $product['options'],
                          'order_id' => $.get.order_id,
                          'total_cost' => $order['meta']['cost'],
                          'product_id' => $product['product_id']
                      ])}
                      {set $i = $i + 1}
                  {/foreach}
                  </div>
                  <form class="row py-3 jsProductRow border-gray-bottom jsAddForm">
                      <p class="h-5">Добавить услугу</p>
                      <input type="hidden" name="weight" value="1">
                      <input type="hidden" name="order_id" value="{$.get.order_id}">
                      <input type="hidden" name="total_cost" value="{$order['meta']['cost']}">
                      <input type="hidden" name="action" value="editOrder">
                      <input type="hidden" name="product_id" value="130">
                      <div class="col-lg-7 col-md-5 col-6 d-flex flex-column justify-content-center align-items-start">
                          <label class="label-text par mb-0 w-100">
                              <input type="text" class="input pr-1" name="name" placeholder="{130 | resource: 'pagetitle'}" value="" required>
                          </label>
                      </div>
                      <div class="col-lg-1 col-md-1 col-6 d-flex justify-content-center align-items-center">
                          <label class="label-text par mb-0">
                              <input type="number" class="input pr-1" min="1" name="count" value="1">
                          </label>
                      </div>
                      <div class="col-lg-2 col-md-3 col-6 d-flex justify-content-center align-items-center">
                          <label class="label-text par mb-0">
                              <input type="text" class="input pr-1" name="price" placeholder="Цена" value="" required>
                          </label>
                      </div>
                      <div class="col-lg-2 col-md-3 col-6 d-flex justify-content-center align-items-center">
                          <button class="btn btn-orange btn-cart" type="submit">
                              <i class="fa fa-cart-plus"></i>
                          </button>
                      </div>
                      <div class="col-12 order-5 mt-3">
                          <label class="label-text par mb-0">
                              <textarea name="options[desc]" class="textarea w-100" rows="4" placeholder="Описание"></textarea>
                          </label>
                      </div>
                  </form>
              {else}
               <ul class="pl-0">
              {foreach $order['products'] as $key => $product}
                  {set $description = $product['product_id'] | resource: 'description'}
                  {set $introtext = $product['product_id'] | resource: 'introtext'}
                  {set $add_cost = $product['product_id'] | resource: 'add_cost'}
                  <li class="row py-3 jsProductRow border-gray-bottom">
                      <input type="hidden" name="id" value="{$id}">
                      <div class="col-lg-7 col-md-5 col-6 d-flex flex-column justify-content-center align-items-start">
                          <span class="par service-link mb-3">{$product['options']['name']?:$product['name']}</span>
                          <small class="small">{$product['options']['desc']?:$description}</small>
                          {if $add_cost}
                              <small class="small text-orange">Добавочная стоимость: {$add_cost} руб.</small>
                          {/if}
                      </div>
                      <div class="col-lg-1 col-md-1 col-6 d-flex justify-content-center align-items-center">
                          <span class="price text-orange h-6">{$product['count']} шт.</span>
                      </div>
                      <div class="col-lg-2 col-md-3 col-6 d-flex justify-content-center align-items-center">
                              <span class="text-orange h-6">{$product['price']} руб.</span>
                      </div>
                      <div class="col-lg-2 col-md-3 col-6 d-flex justify-content-center align-items-center">
                          <span class="text-orange h-6">{$product['cost']} руб.</span>
                      </div>
                  </li>
              {/foreach}
              </ul>
              {/if}
          {else}
          <p class="h-4 text-center">Заказ с id = {$.get.order_id} не существует в системе</p>
          {/if}
          <div class="row">
                  <div class="col-lg-3 offset-lg-3 col-sm-6 mt-3">
                  <div class="btn-wrap">
                      <a href="/" class="btn btn-no-bg w-100">На Главную</a>
                  </div>
              </div>
              <div class="col-lg-3 col-sm-6 mt-3">
                  <div class="btn-wrap">
                      <a href="{9 | url}" class="btn btn-no-bg w-100">К Услугам</a>
                  </div>
              </div>
          </div>
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          11