public function testSetupWithRecord() { $app = $this->getApp(); $content = new Content($app, 'pages'); $content->setValue('id', 5); $event = new StorageEvent($content); $this->assertEquals(5, $event->getId()); $this->assertEquals('pages', $event->getContentType()); }
/** * preSaveCallback. * * This callback is used to store the content of translated fields * on content type update. It is called by the event dispatcher. */ public function preSaveCallback(StorageEvent $event) { $default_locale = $this->app['config']->get('general/locale', 'en_GB'); $prefix = $this->app['config']->get('general/database/prefix', 'bolt_'); $content_type = $event->getContentType(); $content_type_id = $event->getId(); $content = $event->getContent()->getValues(); $content_type_config = $this->app['config']->get('contenttypes/' . $content_type); $locale_field = null; foreach ($content_type_config['fields'] as $name => $field) { if ($field['type'] == 'locale') { $locale_field = $name; break; } } if (!$content_type_id || !$locale_field || $content[$locale_field] === $default_locale) { return; } $translatable_fields = $this->getTranslatableFields($content_type_config['fields']); $query = 'SELECT * FROM ' . $prefix . $content_type . ' WHERE id = :content_type_id'; $default_content = $this->app['db']->fetchAssoc($query, array(':content_type_id' => $content_type_id)); foreach ($translatable_fields as $translatable_field) { $fieldtype = $content_type_config['fields'][$translatable_field]['type']; if (is_a($content[$translatable_field], 'Bolt\\Content')) { $content[$translatable_field] = json_encode($content[$translatable_field]->getValues(true, true)); } if ($fieldtype === "video") { $content[$translatable_field]['html'] = (string) $content[$translatable_field]['html']; $content[$translatable_field]['responsive'] = (string) $content[$translatable_field]['responsive']; } if (in_array($fieldtype, $this->serializedFieldTypes) && !is_string($content[$translatable_field])) { $content[$translatable_field] = json_encode($content[$translatable_field]); } $content_type_config['fields'][$translatable_field]; // Create/update translation entries $query = 'REPLACE INTO ' . $prefix . 'translation (locale, field, content_type_id, content_type, value) VALUES (?, ?, ?, ?, ?)'; $this->app['db']->executeQuery($query, array($content[$locale_field], $translatable_field, $content_type_id, $content_type, (string) $content[$translatable_field])); // Reset values to english $content[$translatable_field] = $default_content[$translatable_field]; } $content[$locale_field] = $default_locale; $event->getContent()->setValues($content); }
/** * Dispatch the event to IFTTT channel * * Only control if the content belongs to allowed content-types to broadcast. */ public function dispatchToChannel(\Bolt\Events\StorageEvent $event) { $id = $event->getId(); $contenttype = $event->getContentType(); $content = $event->getContent(); // Only allowed content types in published state. if (!in_array($contenttype, $this->config['content_types'])) { return; } // Payload $payload = array('value1' => $content->get('title'), 'value2' => $this->app['resources']->getUrl('hosturl') . $content->link()); $event_name = $this->config['event_name']; try { $this->sendRequest($event_name, $payload); $this->log("Channel notified with event '{$event_name}' for {$contenttype}#{$id}"); } catch (\Guzzle\Http\Exception\BadResponseException $e) { $code = $e->getResponse()->getStatusCode(); $message = $e->getMessage(); $this->log("Error : HTTP/{$code} - {$message}", "error"); } }
/** * Handles POST_DELETE storage event * * @param StorageEvent $event */ public function onPostDelete(StorageEvent $event) { $id = $event->getId(); // $contenttype = $event->getContentType(); $record = $event->getContent(); }