Вывод группы пользователя к которой он принадлежит

#
Re: Вывод группы пользователя к которой он принадлежит
Вот такие ошибки выдает
Замечание: Trying to get property of non-object в файле /localhost/public_html/hostcmsfiles/lib/lib_49/lib_49.php (строка 5)
Fatal error: Call to a member function findAll() on a non-object in /localhost/public_html/hostcmsfiles/lib/lib_49/lib_49.php on line 5
dankom
#
Re: Вывод группы пользователя к которой он принадлежит
Покажите весь код динамической странцы
skype: mcross82
#
Re: Вывод группы пользователя к которой он принадлежит
Вот как то так

<?php

$Shop_Controller_Show = Core_Page::instance()->object;

$aSiteuser_Groups = Core_Entity::factory('Siteuser')->getCurrent()->Siteuser_Groups->findAll();
foreach ($aSiteuser_Groups as $oSiteuser_Group)
{
$Shop_Controller_Show->addEntity(
      Core::factory('Core_Xml_Entity')
         ->name('group')
         ->addEntity(
            Core::factory('Core_Xml_Entity')->name('group')->value($oSiteuser_Group->name)
         )
   );
}

$xslName = $Shop_Controller_Show->item
   ? Core_Array::get(Core_Page::instance()->libParams, 'shopItemXsl')
   : Core_Array::get(Core_Page::instance()->libParams, 'shopXsl');

$Shop_Controller_Show->addEntity(
   Core::factory('Core_Xml_Entity')
      ->name('ТекущаяГруппа')->value($Shop_Controller_Show->group)
)->addEntity(
   Core::factory('Core_Xml_Entity')
      ->name('show_comments')->value(Core_Array::get(Core_Page::instance()->libParams, 'showComments', 1))
)->addEntity(
   Core::factory('Core_Xml_Entity')
      ->name('show_add_comments')->value(Core_Array::get(Core_Page::instance()->libParams, 'showAddComment', 2))
);

$Shop_Controller_Show
   ->tags(TRUE)
   ->comments(TRUE)
   ->associatedItems(TRUE)
   ->modifications(TRUE);


$siteuser_id = 0;
if (Core::moduleIsActive('siteuser'))
{
   $oSiteuser = Core_Entity::factory('Siteuser')->getCurrent();

   if ($oSiteuser)
   {
      $siteuser_id = $oSiteuser->id;
   }
}

if ($Shop_Controller_Show->item == 0)
{
   $Shop_Controller_Show->itemsForbiddenTags(array('text'));

   $oShop = $Shop_Controller_Show->getEntity();

   if (Core_Array::getGet('filter') || Core_Array::getGet('sorting'))
   {
      $Shop_Controller_Show->addEntity(
         Core::factory('Core_Xml_Entity')
            ->name('filter')->value(1)
      );

      $sorting = intval(Core_Array::getGet('sorting'));
      $sorting && $Shop_Controller_Show->addEntity(
         Core::factory('Core_Xml_Entity')
            ->name('sorting')->value($sorting)
      );

      // Prices
      $price_from = intval(Core_Array::getGet('price_from'));
      $price_to = intval(Core_Array::getGet('price_to'));
      if ($price_from || $price_to || $sorting == 1 || $sorting == 2)
      {
         // Получаем список валют магазина
         $aShop_Currencies = Core_Entity::factory('Shop_Currency')->findAll();

         $query_currency_switch = 'price';
         foreach ($aShop_Currencies as $oShop_Currency)
         {
            // Получаем коэффициент пересчета для каждой валюты
            $currency_coefficient = Shop_Controller::instance()->getCurrencyCoefficientInShopCurrency(
               $oShop_Currency, $oShop->Shop_Currency
            );

            $query_currency_switch = "IF (`shop_items`.`shop_currency_id` = '{$oShop_Currency->id}', IF (shop_discounts.percent, price * (100 - shop_discounts.percent) * {$currency_coefficient} / 100, shop_items.price * {$currency_coefficient}), {$query_currency_switch})";
         }

         $current_date = date('Y-m-d H:i:s');
         $Shop_Controller_Show->shopItems()
            ->queryBuilder()
            ->select(array(Core_QueryBuilder::expression($query_currency_switch), 'absolute_price'))
            ->leftJoin('shop_item_discounts', 'shop_items.id', '=', 'shop_item_discounts.shop_item_id')
            ->leftJoin('shop_discounts', 'shop_item_discounts.shop_discount_id', '=', 'shop_discounts.id', array(
               array('AND (' => array('shop_discounts.end_datetime', '>=', $current_date)),
               array('OR' => array('shop_discounts.end_datetime', '=', '0000-00-00 00:00:00')),
               array('AND' => array('shop_discounts.start_datetime', '<=', $current_date)),
               array(')' => NULL)
            ));

         if ($price_from)
         {
            $Shop_Controller_Show->shopItems()->queryBuilder()->having('absolute_price', '>=', $price_from) && $Shop_Controller_Show->addEntity(
               Core::factory('Core_Xml_Entity')
                  ->name('price_from')->value($price_from)
            );
         }
         if ($price_to)
         {
            $Shop_Controller_Show->shopItems()->queryBuilder()->having('absolute_price', '<=', $price_to);
            $Shop_Controller_Show->addEntity(
               Core::factory('Core_Xml_Entity')
                  ->name('price_to')->value($price_to)
            );
         }

         $Shop_Controller_Show->shopItems()->queryBuilder()
            ->clearOrderBy()
            ->orderBy('absolute_price', $sorting == 1 ? 'ASC' : 'DESC');
      }

      $sorting == 3 && $Shop_Controller_Show->shopItems()->queryBuilder()
         ->clearOrderBy()
         ->orderBy('shop_items.name', 'ASC');

      // Additional properties
      $oShop_Item_Property_List = Core_Entity::factory('Shop_Item_Property_List', $oShop->id);

      $aProperties = $Shop_Controller_Show->group !== FALSE
         ? $oShop_Item_Property_List->getPropertiesForGroup($Shop_Controller_Show->group)
         : $oShop_Item_Property_List->Properties->findAll();

      $aTmpProperties = array();
      $havingCount = 0;
      foreach ($aProperties as $oProperty)
      {
         // Св-во может иметь несколько значений
         $aPropertiesValue = Core_Array::getGet('property_' . $oProperty->id);
         if ($aPropertiesValue)
         {
            !is_array($aPropertiesValue) && $aPropertiesValue = array($aPropertiesValue);
            foreach ($aPropertiesValue as $sPropertyValue)
            {
               $aTmpProperties[] = array($oProperty, strval($sPropertyValue));
            }
            $havingCount++;
         }
         elseif (!is_null(Core_Array::getGet('property_' . $oProperty->id . '_from')))
         {
            $tmpFrom = Core_Array::getGet('property_' . $oProperty->id . '_from');
            $tmpTo = Core_Array::getGet('property_' . $oProperty->id . '_to');

            !is_array($tmpFrom) && $tmpFrom = array($tmpFrom);
            !is_array($tmpTo) && $tmpTo = array($tmpTo);

            // From ... to ...
            foreach ($tmpFrom as $iKey => $sValue)
            {
               $aTmpProperties[] = array($oProperty, array(
                  'from' => $oProperty->type == 11 ? floatval($sValue) : intval($sValue),
                  'to' => $oProperty->type == 11 ? floatval(Core_Array::get($tmpTo, $iKey)) : intval(Core_Array::get($tmpTo, $iKey))
               ));
            }
            $havingCount++;
         }
      }

      if (count($aTmpProperties))
      {
         $aTableNames = array();

         $Shop_Controller_Show->shopItems()->queryBuilder()
            ->leftJoin('shop_item_properties', 'shop_items.shop_id', '=', 'shop_item_properties.shop_id')
            ->setAnd()
            ->open();

         reset($aTmpProperties);
         while(list(, list($oProperty, $propertyValue)) = each($aTmpProperties))
         {
            $tableName = $oProperty->createNewValue(0)->getTableName();

            !in_array($tableName, $aTableNames) && $aTableNames[] = $tableName;

            $Shop_Controller_Show->shopItems()->queryBuilder()
               ->where('shop_item_properties.property_id', '=', $oProperty->id);

            if (!is_array($propertyValue))
            {
               $Shop_Controller_Show->shopItems()->queryBuilder()
                  ->where($tableName . '.value', '=', $propertyValue)
                  ->setOr();

               $Shop_Controller_Show->addEntity(
                  Core::factory('Core_Xml_Entity')
                     ->name('property_' . $oProperty->id)->value($propertyValue)
               );
            }
            else
            {
               $from = trim(strval(Core_Array::get($propertyValue, 'from')));
               $from && $Shop_Controller_Show->shopItems()->queryBuilder()
                  ->where($tableName . '.value', '>=', $from)
                  ->setAnd();

               $to = trim(strval(Core_Array::get($propertyValue, 'to')));
               $to && $Shop_Controller_Show->shopItems()->queryBuilder()
                  ->where($tableName . '.value', '<=', $to);

               $Shop_Controller_Show->shopItems()->queryBuilder()
                  ->setOr();

               $Shop_Controller_Show->addEntity(
                  Core::factory('Core_Xml_Entity')
                     ->name('property_' . $oProperty->id . '_from')->value($from)
               )->addEntity(
                  Core::factory('Core_Xml_Entity')
                     ->name('property_' . $oProperty->id . '_to')->value($to)
               );
            }
         }

         $Shop_Controller_Show->shopItems()->queryBuilder()
            ->close()
            ->groupBy('shop_items.id')
            ->having('COUNT(shop_item_properties.id)', '=', $havingCount);

         foreach ($aTableNames as $tableName)
         {
            $Shop_Controller_Show->shopItems()->queryBuilder()
               ->leftJoin($tableName, 'shop_items.id', '=', $tableName . '.entity_id',
                  array(
                     array('AND' => array('shop_item_properties.property_id', '=', Core_QueryBuilder::expression($tableName . '.property_id')))
                  )
               );
         }
      }
   }

   // Добавление объявления
   if ($Shop_Controller_Show->group && Core_Array::getPost('send_ad'))
   {
      $oShop_Item = Core_Entity::factory('Shop_Item');

      $oShop_Item->active = Core_Array::get(Core_Page::instance()->libParams, 'addedItemActive', 0);
      $oShop_Item->name = strval(Core_Array::getPost('name'));
      $oShop_Item->text = strval(Core_Array::getPost('text'));
      $oShop_Item->price = floatval(Core_Array::getPost('price', 0));
      $oShop_Item->path = '';

      $oShop_Item_Property_List = Core_Entity::factory('Shop_Item_Property_List', $oShop->id);
      $aProperties = $oShop_Item_Property_List->getPropertiesForGroup($Shop_Controller_Show->group);

      if ($oShop->use_captcha == 0 || $siteuser_id > 0 || Core_Captcha::valid(Core_Array::getPost('captcha_id'), Core_Array::getPost('captcha')))
      {
         $oShop_Item->shop_id = $oShop->id;
         $oShop_Item->shop_currency_id = $oShop->shop_currency_id;
         $oShop_Item->siteuser_id = $siteuser_id;

         Core_Entity::factory('Shop_Group', $Shop_Controller_Show->group)
            ->add($oShop_Item);

         $oShop_Item->createDir();

         $aFileData = Core_Array::getFiles("image", array());

         // New values of property
         if (is_array($aFileData) && isset($aFileData['name']))
         {
            if (Core_File::isValidExtension($aFileData['name'], array('JPG', 'JPEG', 'GIF', 'PNG')))
            {
               try
               {
                  $sLargeImageFile = 'shop_items_catalog_image' . $oShop_Item->id . '.' . Core_File::getExtension($aFileData['name']);

                  Core_Image::instance()->resizeImage($aFileData['tmp_name'], $oShop->image_large_max_width, $oShop->image_large_max_height, $oShop_Item->getItemPath() . $sLargeImageFile, NULL, $oShop->preserve_aspect_ratio);
                  $oShop_Item->image_large = $sLargeImageFile;
                  $oShop_Item->setLargeImageSizes();

                  Core_Image::instance()->resizeImage($aFileData['tmp_name'], $oShop->image_small_max_width, $oShop->image_small_max_height, $oShop_Item->getItemPath() . 'small_'.$sLargeImageFile,  NULL, $oShop->preserve_aspect_ratio_small);
                  $oShop_Item->image_small = 'small_'.$sLargeImageFile;
                  $oShop_Item->setSmallImageSizes();
               }
               catch (Exception $e) {};
            }
         }

         foreach ($aProperties as $oProperty)
         {
            // Поле не скрытое
            if ($oProperty->type != 10)
            {
               $oProperty_Value = $oProperty->createNewValue($oShop_Item->id);

               // Дополнительные свойства
               switch ($oProperty->type)
               {
                  case 0: // Int
                  case 3: // List
                  case 5: // Information system
                     $oProperty_Value->value(intval(Core_Array::getPost("property_{$oProperty->id}")));
                     $oProperty_Value->save();
                  break;
                  case 1: // String
                  case 4: // Textarea
                  case 6: // Wysiwyg
                     $oProperty_Value->value(strval(Core_Array::getPost("property_{$oProperty->id}")));
                     $oProperty_Value->save();
                  break;
                  case 8: // Date
                     $date = strval(Core_Array::getPost("property_{$oProperty->id}"));
                     $date = Core_Date::date2sql($date);
                     $oProperty_Value->value($date);
                     $oProperty_Value->save();
                  break;
                  case 9: // Datetime
                     $datetime = strval(Core_Array::getPost("property_{$oProperty->id}"));
                     $datetime = Core_Date::datetime2sql($datetime);
                     $oProperty_Value->value($datetime);
                     $oProperty_Value->save();
                  break;
                  case 2: // File
                     $aFileData = Core_Array::getFiles("property_{$oProperty->id}", array());

                     // New values of property
                     if (is_array($aFileData) && isset($aFileData['name']))
                     {
                        foreach ($aFileData['name'] as $key => $sFileName)
                        {
                           $oFileValue = $oProperty->createNewValue($oShop_Item->id);

                           if (Core_File::isValidExtension($sFileName, array('JPG', 'JPEG', 'GIF', 'PNG')))
                           {
                              $oFileValue->file_name = $sFileName;
                              $oFileValue->file_small_name = $sFileName;
                              $oFileValue->save();

                              try
                              {
                                 $oShop_Item_Property_List->createPropertyDir($oShop_Item);

                                 Core_Image::instance()->resizeImage($aFileData['tmp_name'][$key], $oShop->image_large_max_width, $oShop->image_large_max_height, $oShop_Item_Property_List->getDirPath($oShop_Item) . $oShop_Item_Property_List->getLargeFileName($oShop_Item, $oFileValue, $sFileName));

                                 $oFileValue->file = $oShop_Item_Property_List->getLargeFileName($oShop_Item, $oFileValue, $sFileName);

                                 Core_Image::instance()->resizeImage($aFileData['tmp_name'][$key], $oShop->image_small_max_width, $oShop->image_small_max_height, $oShop_Item_Property_List->getDirPath($oShop_Item) . $oShop_Item_Property_List->getSmallFileName($oShop_Item, $oFileValue, $sFileName));

                                 $oFileValue->file_small = $oShop_Item_Property_List->getSmallFileName($oShop_Item, $oFileValue, $sFileName);

                                 $oFileValue->save();
                              }
                              catch (Exception $e) {};
                           }
                        }
                     }
                  break;
                  case 7: // Checkbox
                     $oProperty_Value->value(is_null(Core_Array::getPost("property_{$oProperty->id}")) ? 0 : 1);
                     $oProperty_Value->save();
                  break;
               }
            }
         }

         $Shop_Controller_Show->addEntity(Core::factory('Core_Xml_Entity')
            ->name('messages')->addEntity(Core::factory('Core_Xml_Entity')
               ->name('message')->value('Объявление успешно добавлено.')
            ));
      }
      else
      {
         $oAddItem = Core::factory('Core_Xml_Entity')
            ->name('add_item');

         $oAddItem->addEntity(Core::factory('Core_Xml_Entity')
               ->name('name')
               ->value($oShop_Item->name))
            ->addEntity(Core::factory('Core_Xml_Entity')
               ->name('text')
               ->value($oShop_Item->text))
            ->addEntity(Core::factory('Core_Xml_Entity')
               ->name('price')
               ->value($oShop_Item->price));

         foreach ($aProperties as $oProperty)
         {
            $oAddItem->addEntity(Core::factory('Core_Xml_Entity')
               ->name('property')
               ->addEntity(Core::factory('Core_Xml_Entity')
                  ->name('id')
                  ->value($oProperty->id))
               ->addEntity(Core::factory('Core_Xml_Entity')
                  ->name('value')
                  ->value($oProperty->type == 0
                     ? intval(Core_Array::getPost("property_{$oProperty->id}", 0))
                     : strval(Core_Array::getPost("property_{$oProperty->id}")))
               ));
         }

         $Shop_Controller_Show->addEntity(Core::factory('Core_Xml_Entity')
            ->name('errors')->addEntity(Core::factory('Core_Xml_Entity')
               ->name('error')->value('Вы неверно ввели число подтверждения отправки формы!')
            ));

         $Shop_Controller_Show->addEntity($oAddItem);
      }
   }
}
else
{
   if (Core_Array::getPost('add_comment') && Core_Array::get(Core_Page::instance()->libParams, 'showComments', 1))
   {
      $oShop = $Shop_Controller_Show->getEntity();

      $Shop_Controller_Show->cache(FALSE);

      $oLastComment = Core_Entity::factory('Comment')->getLastCommentByIp(
         Core_Array::get($_SERVER, 'REMOTE_ADDR')
      );

      $oXmlCommentTag = Core::factory('Core_Xml_Entity')
         ->name('document');

      $siteuser_id = 0;
      if (Core::moduleIsActive('siteuser'))
      {
         $oSiteuser = Core_Entity::factory('Siteuser')->getCurrent();

         if ($oSiteuser)
         {
            $siteuser_id = $oSiteuser->id;
         }
      }

      $oComment = Core_Entity::factory('Comment');

      $allowable_tags = '<b><strong><i><em><br><p><u><strike><ul><ol><li>';
      $oComment->parent_id = intval(Core_Array::getPost('parent_id', 0));
      $oComment->active = $oShop->comment_active;
      $oComment->author = Core_Str::stripTags(Core_Array::getPost('author'));
      $oComment->email = Core_Str::stripTags(Core_Array::getPost('email'));
      $oComment->phone = Core_Str::stripTags(Core_Array::getPost('phone'));
      $oComment->grade = intval(Core_Array::getPost('grade', 0));
      $oComment->subject = Core_Str::stripTags(Core_Array::getPost('subject'));
      $oComment->text = nl2br(Core_Str::stripTags(Core_Array::getPost('text'), $allowable_tags));
      $oComment->siteuser_id = $siteuser_id;

      $oShop_Item = Core_Entity::factory('Shop_Item', $Shop_Controller_Show->item);

      $oXmlCommentTag
         ->addEntity($oComment)
         ->addEntity($oShop_Item);

      if (is_null($oLastComment) || time() > Core_Date::sql2timestamp($oLastComment->datetime) + ADD_COMMENT_DELAY)
      {
         if ($oShop->use_captcha == 0 || $siteuser_id > 0 || Core_Captcha::valid(Core_Array::getPost('captcha_id'), Core_Array::getPost('captcha')))
         {
            $oComment->save();

            $oShop_Item->add($oComment);

            $oXmlCommentTag->addEntity($oShop);

            // Отправка письма администратору
            $sText = Xsl_Processor::instance()
               ->xml($oXmlCommentTag->getXml())
               ->xsl(Core_Entity::factory('Xsl')->getByName(Core_Array::get(Core_Page::instance()->libParams, 'addCommentAdminMailXsl')))
               ->process();

            Core_Mail::instance()
               ->to(EMAIL_TO)
               ->from(Core_Valid::email($oComment->email)
                  ? $oComment->email
                  : EMAIL_TO
               )
               ->subject(Core::_('Shop.comment_mail_subject'))
               ->message(trim($sText))
               ->contentType(Core_Array::get(Core_Page::instance()->libParams, 'commentMailNoticeType', 0) == 0
                  ? 'text/plain'
                  : 'text/html'
               )
               ->send();
         }
         else
         {
            $oXmlCommentTag->addEntity(Core::factory('Core_Xml_Entity')
               ->name('error_captcha')->value(1)
            );

            $oComment->text = Core_Str::br2nl($oComment->text);
            $Shop_Controller_Show->addEntity($oComment);
         }
      }
      else
      {
         $oXmlCommentTag->addEntity(Core::factory('Core_Xml_Entity')
            ->name('error_time')->value(1)
         );

         $oComment->text = Core_Str::br2nl($oComment->text);
         $Shop_Controller_Show->addEntity($oComment);
      }

      // Результат добавления комментария
      $xsl_result = Xsl_Processor::instance()
         ->xml($oXmlCommentTag->getXml())
         ->xsl(Core_Entity::factory('Xsl')->getByName(
            Core_Array::get(Core_Page::instance()->libParams, 'addCommentNoticeXsl'))
         )
         ->process();

      $Shop_Controller_Show->addEntity(
         Core::factory('Core_Xml_Entity')
            ->name('message')->value($xsl_result)
      );
   }
}

$Shop_Controller_Show
   ->xsl(
      Core_Entity::factory('Xsl')->getByName($xslName)
   )
   ->itemsProperties(TRUE)
   ->show();
dankom
#
Re: Re: Вывод группы пользователя к которой он принадлежит
Ошибка возникает из-за того, что пользователь не залогинен.
Вам необходимо добавить проверку, если пользователь залогинен, то выполнять код.
Вот корявенький пример


if (!is_null(Core_Entity::factory('Siteuser')->getCurrent())){
   $aSiteuser_Groups = Core_Entity::factory('Siteuser')->getCurrent()->Siteuser_Groups->findAll();
   foreach ($aSiteuser_Groups as $oSiteuser_Group)
      {
      $Shop_Controller_Show->addEntity(
           Core::factory('Core_Xml_Entity')
             ->name('group1111')
             ->addEntity(
               Core::factory('Core_Xml_Entity')->name('group')->value($oSiteuser_Group->name)
             )
            
         );

      }
}
skype: mcross82
Модератор
#
Re: Вывод группы пользователя к которой он принадлежит
Mcross,
Core_Entity::factory('Siteuser')->getCurrent(); - это объект пользователя, а не массив групп. Ваша запись введет в заблуждение того, кто потом будет смотреть код. Поэтому лучше писать:

$oSiteuser = Core_Entity::factory('Siteuser')->getCurrent();


и проверять на is_null

if(!is_null($oSiteuser)){
...
}


либо сразу писать:

if (!is_null(Core_Entity::factory('Siteuser')->getCurrent()))
...
}
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Re: Вывод группы пользователя к которой он принадлежит
Александр, спасибо исправил.
skype: mcross82
#
Re: Вывод группы пользователя к которой он принадлежит
Да то что нужно.
Спасибо большое. Очень помогли
dankom
Авторизация