You are here

class views_plugin_row_rdf_node in Views Atom 7

Same name and namespace in other branches
  1. 6 views/views_plugin_row_rdf_node.inc \views_plugin_row_rdf_node

Plugin which performs a node_view on the resulting object and formats it as an RSS item.

Hierarchy

Expanded class hierarchy of views_plugin_row_rdf_node

1 string reference to 'views_plugin_row_rdf_node'
views_atom_views_plugins in ./views_atom.views.inc
Implements hook_views_plugins().

File

./views_plugin_row_rdf_node.inc, line 12
Contains the RDF row style plugin.

View source
class views_plugin_row_rdf_node extends views_plugin_row_rdf {

  // Basic properties that let the row style follow relationships.
  var $base_table = 'node';
  var $base_field = 'nid';
  function render($row) {

    // For the most part, this code is taken from node_feed() in node.module
    global $base_url;
    $nid = $row->{$this->field_alias};
    if (!is_numeric($nid)) {
      return;
    }
    if (!empty($this->view->views_atom_nodes[$nid])) {
      $node = $this->view->views_atom_nodes[$nid];
    }
    else {
      $node = node_load($nid);
    }

    // Allow other modules to modify the node before we start serializing it.
    module_invoke_all('views_atom_prerender', $node);
    module_invoke_all('views_atom_prerender_node', $node);

    // We need to start with a DOMDocument because SimpleXML's namespace handling
    // is abysmal.  Fortunately we can swap back and forth as needed.
    // @todo: Add more common namespaces here if needed.
    $dom = new DOMDocument('1.0');
    $rdf_xml = $dom
      ->createElementNS('http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'rdf:RDF');
    $dom
      ->appendChild($rdf_xml);

    // Get a SimpleXML version of the object for serious manipulation, since
    // its API is much easier to work with.
    $xml = simplexml_import_dom($dom);

    // Create the base entity element that wraps all Drupal data objects.
    $entity_xml = $xml
      ->addChild('entity', NULL, 'http://drupal.org/');

    // Node type is more generically "bundle", at least in Drupal 7 speak.
    $entity_xml
      ->addAttribute('type', 'node');
    $entity_xml
      ->addAttribute('bundle', check_plain($node->type));
    $entity_xml
      ->addChild('title', views_atom_sanitize($node->title));

    // Properties are primitive data associated with the entity.  These are
    // standard by entity type.  Those all get wrapped in a <properties> element.
    $properties_xml = $entity_xml
      ->addChild('properties');

    // Since we don't have a complete map of available properties, we'll just
    // treat any primitive values on the node object as properties.  That will
    // get more than we need, but it works well enough.
    foreach ($node as $property => $value) {

      // @todo, reexamine the use of empty() here. I've had to add the check for '0'
      if (is_scalar($value) && (!empty($value) || $value === '0')) {

        // We want to map the date fields to Atom/RDF format properly.  The others
        // we'll just send along as is.
        if (in_array($property, array(
          'created',
          'changed',
        ))) {
          $properties_xml
            ->addChild($property, date('c', $value));
        }
        else {
          $properties_xml
            ->addChild($property, views_atom_sanitize($value));
        }
      }
    }

    // Allow other modules the opportunity to get in on the XML conversion action.
    module_invoke_all('views_atom_render', $node, $entity_xml);
    module_invoke_all('views_atom_render_node', $entity_xml);
    drupal_alter('views_atom_render_rdf', $entity_xml, $node);

    // Force pretty formatting to make debugging easier.  It doesn't actually
    // affect parsing.  Note that because all objects in PHP are references
    // this $dom variable still has all of the changes made above using SimpleXML.
    // That's neat.
    $dom->formatOutput = TRUE;

    // This is stupid and bad, but I don't know of another way to supress the
    // <?xml crap.
    // @todo Find a better way to not get the XML declaration in the output.
    $output = $dom
      ->saveXML();
    return str_replace('<?xml version="1.0"?>' . "\n", '', $output);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
views_object::$definition public property Handler's definition.
views_object::$options public property Except for displays, options for the object will be held here. 1
views_object::altered_option_definition function Collect this handler's option definition and alter them, ready for use.
views_object::construct public function Views handlers use a special construct function. 4
views_object::destroy public function Destructor. 2
views_object::export_option public function 1
views_object::export_options public function
views_object::export_option_always public function Always exports the option, regardless of the default value.
views_object::options Deprecated public function Set default options on this object. 1
views_object::set_default_options public function Set default options.
views_object::set_definition public function Let the handler know what its full definition is.
views_object::unpack_options public function Unpack options over our existing defaults, drilling down into arrays so that defaults don't get totally blown away.
views_object::unpack_translatable public function Unpack a single option definition.
views_object::unpack_translatables public function Unpacks each handler to store translatable texts.
views_object::_set_option_defaults public function
views_plugin::$display public property The current used views display.
views_plugin::$plugin_name public property The plugin name of this plugin, for example table or full.
views_plugin::$plugin_type public property The plugin type of this plugin, for example style or query.
views_plugin::$view public property The top object of a view. Overrides views_object::$view 1
views_plugin::additional_theme_functions public function Provide a list of additional theme functions for the theme info page.
views_plugin::plugin_title public function Return the human readable name of the display.
views_plugin::summary_title public function Returns the summary of the settings in the display. 8
views_plugin::theme_functions public function Provide a full list of possible theme templates used by this style.
views_plugin::validate public function Validate that the plugin is correct and can be saved. 3
views_plugin_row::init public function 2
views_plugin_row::options_form public function Provide a form for setting options. Overrides views_plugin::options_form 9
views_plugin_row::options_submit public function Perform any necessary changes to the form values prior to storage. There is no need for this function to actually store the data. Overrides views_plugin::options_submit 1
views_plugin_row::options_validate public function Validate the options form. Overrides views_plugin::options_validate
views_plugin_row::option_definition public function Information about options for all kinds of purposes will be held here. Overrides views_object::option_definition 9
views_plugin_row::pre_render public function Allow the style to do stuff before each row is rendered. 5
views_plugin_row::query public function Add anything to the query that we might need to. Overrides views_plugin::query
views_plugin_row::uses_fields public function
views_plugin_row_rdf_node::$base_field property Overrides views_plugin_row_rdf::$base_field
views_plugin_row_rdf_node::$base_table property Overrides views_plugin_row_rdf::$base_table
views_plugin_row_rdf_node::render function Render a row object. This usually passes through to a theme template of some form, but not always. Overrides views_plugin_row_rdf::render