Exemplo n.º 1
0
 /**
  * 2015-12-09
  * На странице может быть сразу несколько данных элементов управления.
  * Возникает проблема: как синхронизировать их одновременные обращения к серверу за данными?
  * Проблемой это является, потому что генерация образцов шрифтов —
  * длительная (порой минуты) задача со множеством файловых операций.
  * Параллельный запуск сразу двух таких генераций
  * (а они будут выполняться разными процессами PHP)
  * почти наверняка приведёт к файловым конфликтам и ошибкам,
  * да и вообще смысла в этом никакого нет:
  * зачем параллельно делать одно и то же с одними и теми же объектами?
  * Эта проблема была решена в серверной части применением функции @uses df_sync
  * @override
  * @see \Magento\Framework\App\Action\Action::execute()
  * @return Json
  */
 public function execute()
 {
     df_response_cache_max();
     $this->_actionFlag->set('', self::FLAG_NO_POST_DISPATCH, true);
     return df_sync($this, function () {
         return Json::i(Cache::i(null, 30 * 86400)->p(function () {
             return df_json_encode(['sprite' => $this->sprite()->url(), 'fonts' => array_filter(df_map(function (Font $font) {
                 return array_filter(array_map(function (Variant $variant) {
                     return $this->sprite()->datumPoint($variant->preview());
                 }, $font->variants()));
             }, _Fonts::s()))]);
         }, __METHOD__, df_request(), null));
     });
 }
Exemplo n.º 2
0
 /**
  * @override
  * @see \Df\Payment\Method::getConfigPaymentAction()
  * @return string
  *
  * 2016-08-27
  * Сюда мы попадаем только из метода @used-by \Magento\Sales\Model\Order\Payment::place()
  * причём там наш метод вызывается сразу из двух мест и по-разному.
  * Умышленно возвращаем null.
  * @used-by \Magento\Sales\Model\Order\Payment::place()
  * https://github.com/magento/magento2/blob/ffea3cd/app/code/Magento/Sales/Model/Order/Payment.php#L334-L355
  */
 public final function getConfigPaymentAction()
 {
     /** @var string $id */
     /** @var array(string => mixed) $p */
     list($id, $p) = Charge::p($this);
     /** @var string $url */
     $url = $this->url($this->redirectUrl());
     /**
      * 2016-07-01
      * К сожалению, если передавать в качестве результата ассоциативный массив,
      * то его ключи почему-то теряются. Поэтому запаковываем массив в JSON.
      */
     $this->iiaSet(PlaceOrder::DATA, df_json_encode(['params' => $p, 'uri' => $url]));
     // 2016-05-06
     // Письмо-оповещение о заказе здесь ещё не должно отправляться.
     // «How is a confirmation email sent on an order placement?» https://mage2.pro/t/1542
     $this->o()->setCanSendNewEmailFlag(false);
     // 2016-07-10
     // Сохраняем информацию о транзакции.
     $this->saveRequest($id, $url, $p);
     return null;
 }
Exemplo n.º 3
0
 /**
  * 2015-12-08
  * @override
  * @see \Df\GoogleFont\Fonts\Png::draw()
  * @used-by \Df\GoogleFont\Fonts\Png::image()
  * @param resource $image
  * @return void
  */
 protected function draw($image)
 {
     /** @var int $x */
     $x = 0;
     /** @var int $y */
     $y = 0;
     $this->_datumPoints = [];
     /** @var int|bool|resource $r */
     $r = imagefill($image, 0, 0, $this->colorAllocateAlpha($image, $this->bgColor()));
     df_assert($r);
     // http://stackoverflow.com/a/1397584/254475
     imagealphablending($image, true);
     foreach ($this->previews() as $preview) {
         /** @var Preview $preview */
         try {
             /** @var resource $previewImage */
             $previewImage = imagecreatefromstring($preview->contents());
             df_assert($previewImage);
             try {
                 $r = imagecopy($image, $previewImage, $x, $y, 0, 0, $preview->width(), $preview->height());
                 df_assert($r);
                 $this->_datumPoints[$preview->getId()] = [$x, $y];
             } finally {
                 imagedestroy($previewImage);
             }
         } catch (\Exception $e) {
             df_log($e->getMessage());
         }
         $x += $this->previewWidth();
         if ($x >= $this->width()) {
             $x = 0;
             $y += $this->previewHeight() + $this->marginY();
         }
     }
     df_media_write($this->pathToDatumPoints(), df_json_encode($this->_datumPoints));
 }
Exemplo n.º 4
0
/**
 * 2016-08-22
 * @see dfp_add_info()
 * 2016-08-23
 * Если значением ключа в $info будет null, то предыдущий ключ удалится: @see dfo()
 * @param DataObject|C $c
 * @param array(string => mixed) $info
 * @return void
 */
function df_customer_info_add(DataObject $c, array $info)
{
    $c[Schema::F__DF] = df_json_encode(df_extend(df_customer_info_get($c), $info));
}
Exemplo n.º 5
0
 /**
  * 2016-08-24
  * @override
  * @see \Df\Framework\Controller\Result\Text::prepare()
  * @used-by \Df\Framework\Controller\Result\Text::i()
  * @param string|mixed[] $body
  * @return string
  */
 protected function prepare($body)
 {
     return is_array($body) ? df_json_encode($body) : $body;
 }
Exemplo n.º 6
0
Arquivo: js.php Projeto: mage2pro/core
/**
 * 2016-11-28
 * Такой синтаксис, в отличие от @see df_x_magento_init(),
 * позволяет нам иметь в JavaScript объект-элемент DOM вторым параметром:
 * https://github.com/magento/magento2/blob/2.1.2/lib/web/mage/apply/main.js#L69-L70
 * Пример: https://github.com/magento/magento2/blob/2.1.2/app/code/Magento/Checkout/view/frontend/templates/cart/minicart.phtml#L30-L38
 * @see json_encode всегда использует двойные кавычки,
 * а @see \Df\Core\Format\Html\Tag::openTagWithAttributesAsText()
 * всегда обрамляет значение в одинарные кавычки,
 * поэтому df_x_magento_init_att() всегда совместима с @see df_tag()
 * @param string|object $module
 * @param string $script
 * @param array(string => mixed) $params
 * @return array(string => string)
 */
function df_x_magento_init_att($module, $script, array $params = [])
{
    return ['data-mage-init' => df_json_encode([df_cc_path(df_module_name($module), $script) => $params])];
}