function testSaveExistingImages()
 {
     $images = array('http://upload.wikimedia.org/wikipedia/commons/f/ff/Tim_Berners-Lee-Knight.jpg', 'http://upload.wikimedia.org/wikipedia/commons/3/3a/Tim_Berners-Lee_closeup.jpg', 'http://upload.wikimedia.org/wikipedia/commons/c/c2/Tim_Berners-Lee_2012.jpg', 'http://upload.wikimedia.org/wikipedia/commons/3/3a/Tim_Berners-Lee_closeup.jpg');
     $entity_post = wl_save_entity(array('uri' => 'http://example.org/entity', 'label' => 'Entity', 'main_type' => 'http://schema.org/Thing', 'description' => 'An example entity.', 'type_uris' => array(), 'related_post_id' => null, 'image' => $images, 'same_as' => array()));
     // Get all the attachments for the entity post.
     $attachments = wl_get_attachments($entity_post->ID);
     // Check that there is one attachment.
     $this->assertEquals(3, count($attachments));
     // Check that the attachments are found by source URL.
     foreach ($images as $image) {
         $image_post = wl_get_attachment_for_source_url($entity_post->ID, $image);
         $this->assertNotNull($image_post);
     }
 }
/**
 * Saves the values of wordlift metaboxes set in the entity editor page
 */
function wl_entity_metabox_save($post_id)
{
    if (!isset($_POST['wl_metaboxes'])) {
        return;
    }
    // Loop over the wl_metaboxes array and save metaboxes values
    foreach ($_POST['wl_metaboxes'] as $meta_name => $meta_values) {
        // First, verify nonce is set for this meta
        $nonce_name = 'wordlift_' . $meta_name . '_entity_box_nonce';
        $nonce_verify = 'wordlift_' . $meta_name . '_entity_box';
        if (!isset($_POST[$nonce_name])) {
            return $post_id;
        }
        // Verify that the nonce is valid.
        if (!wp_verify_nonce($_POST[$nonce_name], $nonce_verify)) {
            return $post_id;
        }
        // Delete values before updating
        delete_post_meta($post_id, $meta_name);
        // Save the property value(s)
        if (isset($meta_name) && isset($meta_values) && $meta_values !== '') {
            // There can be one or more property values, so we force to array:
            if (!is_array($meta_values)) {
                $meta_values = array($meta_values);
            }
            foreach ($meta_values as $meta_value) {
                // If the meta expects an entity...
                $expecting_uri = wl_get_meta_type($meta_name) === WL_DATA_TYPE_URI;
                // ...and the user inputs an entity that is not present in the db...
                $absent_from_db = is_null(wl_get_entity_post_by_uri($meta_value));
                // ...and that is not a external uri
                $name_is_uri = strpos($meta_value, 'http') === 0;
                if ($expecting_uri && $absent_from_db && !$name_is_uri) {
                    // ...we create a new entity!
                    $new_entity = wl_save_entity('', $meta_value, WL_ENTITY_TYPE_NAME, '');
                    // Assign type
                    $constraints = wl_get_meta_constraints($meta_name);
                    $type = 'http://schema.org/' . $constraints['uri_type'];
                    wl_set_entity_main_type($new_entity->ID, $type);
                    // TODO: directly publish the new entity
                    // Update the value that will be saved as meta
                    $meta_value = wl_get_entity_uri($new_entity->ID);
                }
                // TODO: use WL methods
                add_post_meta($post_id, $meta_name, $meta_value);
            }
        }
    }
    // Push changes on RedLink
    wl_linked_data_push_to_redlink($post_id);
}
/**
 * Save the specified entities to the local storage.
 *
 * @param array $entities An array of entities.
 * @param int $related_post_id A related post ID.
 *
 * @return array An array of posts.
 */
function wl_save_entities($entities, $related_post_id = null)
{
    wl_write_log("[ entities count :: " . count($entities) . " ][ related post id :: {$related_post_id} ]");
    // Prepare the return array.
    $posts = array();
    // Save each entity and store the post id.
    foreach ($entities as $entity) {
        $uri = $entity['uri'];
        $label = $entity['label'];
        // This is the main type URI.
        $main_type_uri = $entity['main_type'];
        // the preferred type.
        $type_uris = isset($entity['type']) ? $entity['type'] : array();
        $description = $entity['description'];
        $images = isset($entity['image']) ? is_array($entity['image']) ? $entity['image'] : array($entity['image']) : array();
        $same_as = isset($entity['sameas']) ? is_array($entity['sameas']) ? $entity['sameas'] : array($entity['sameas']) : array();
        // Bring properties inside an associative array
        $entity_properties = array('uri' => $uri, 'label' => $label, 'main_type_uri' => $main_type_uri, 'description' => $description, 'type_uris' => $type_uris, 'images' => $images, 'related_post_id' => $related_post_id, 'same_as' => $same_as);
        // Save the entity.
        $entity_post = wl_save_entity($entity_properties);
        // Store the post in the return array if successful.
        if (null !== $entity_post) {
            array_push($posts, $entity_post);
        }
    }
    return $posts;
}
Пример #4
0
 function create_MIT_Center_for_Collective_Intelligence($related_post_id)
 {
     $uri = 'http://dbpedia.org/resource/MIT_Center_for_Collective_Intelligence';
     $label = 'MIT Center for Collective Intelligence';
     $type = 'http://schema.org/Organization';
     $description = file_get_contents(dirname(__FILE__) . '/assets/mit_center_for_cognitive_intelligence.txt');
     $images = array();
     $same_as = array('http://rdf.freebase.com/ns/m.04n2n64');
     $entity_post = wl_save_entity($uri, $label, $type, $description, array(), $images, $related_post_id, $same_as);
     // Check that the type is set correctly.
     $types = wl_get_entity_rdf_types($entity_post->ID);
     $this->assertEquals(0, count($types));
     //        $this->assertEquals( 'organization', $types[0]->slug );
     // Check that Tim Berners-Lee is related to this resource.
     $related_entities = wl_core_get_related_entity_ids($entity_post->ID);
     $this->assertEquals(1, count($related_entities));
     $this->assertEquals($related_post_id, $related_entities[0]);
     return $entity_post->ID;
 }
/**
 * Save the specified entities to the local storage.
 *
 * @param array $entities An array of entities.
 * @param int $related_post_id A related post ID.
 *
 * @return array An array of posts.
 */
function wl_save_entities($entities, $related_post_id = null)
{
    // wl_write_log( "[ entities count :: " . count( $entities ) . " ][ related post id :: $related_post_id ]" );
    // Prepare the return array.
    $posts = array();
    // Save each entity and store the post id.
    foreach ($entities as $entity) {
        // Update entity data with related post
        $entity['related_post_id'] = $related_post_id;
        // Save the entity.
        $entity_post = wl_save_entity($entity);
        // Store the post in the return array if successful.
        if (null !== $entity_post) {
            array_push($posts, $entity_post);
        }
    }
    return $posts;
}