Esempio n. 1
0
 function get_associations()
 {
     $d = new DBSelector();
     $d->add_table('ar', 'allowable_relationship');
     $d->add_table('allowable_relationship');
     $d->add_table('relationship');
     $d->add_table('entity');
     $d->add_relation('allowable_relationship.name = "site_to_type"');
     $d->add_relation('allowable_relationship.id = relationship.type');
     $d->add_relation('relationship.entity_a = ' . $this->admin_page->site_id);
     $d->add_relation('relationship.entity_b = ar.relationship_b');
     $d->add_relation('entity.id = ar.relationship_b');
     $d->add_field('entity', 'id', 'e_id');
     $d->add_field('entity', 'name', 'e_name');
     $d->add_field('ar', '*');
     $d->add_relation('ar.relationship_a = ' . $this->admin_page->type_id);
     if (reason_relationship_names_are_unique()) {
         $d->add_relation('ar.type = "association"');
     } else {
         $d->add_relation('ar.name != "owns"');
     }
     $d->add_relation('(ar.custom_associator IS NULL OR ar.custom_associator = "")');
     $r = db_query($d->get_query(), 'Error selecting relationships');
     $return_me = array();
     while ($row = mysql_fetch_array($r, MYSQL_ASSOC)) {
         $return_me[$row['id']] = $row;
     }
     $this->associations = $return_me;
     if (empty($this->admin_page->rel_id)) {
         reset($this->associations);
         list($key, ) = each($this->associations);
         $this->admin_page->rel_id = $key;
     }
 }
Esempio n. 2
0
 function no_ass()
 {
     $d = new DBSelector();
     $d->add_table('r', 'relationship');
     $d->add_table('ar', 'allowable_relationship');
     $d->add_relation('r.type = ar.id');
     $d->add_relation('ar.id = ' . $this->admin_page->rel_id);
     $d->add_relation('r.entity_a = ' . $this->admin_page->id);
     $r = db_query($d->get_query(), "Can't do query in FinishModule::check_required_relationships()");
     if (mysql_fetch_array($r)) {
         return false;
     } else {
         return true;
     }
 }
Esempio n. 3
0
 function load_images($association_id, $entity_id)
 {
     $dbq = new DBSelector();
     $dbq->add_table('i', 'image');
     $dbq->add_table('m', 'meta');
     $dbq->add_table('r', 'relationship');
     $dbq->add_field('i', 'id');
     $dbq->add_field('i', 'width');
     $dbq->add_field('i', 'height');
     $dbq->add_field('i', 'size');
     $dbq->add_field('i', 'image_type');
     $dbq->add_field('m', 'description');
     $dbq->add_relation('r.type = ' . $association_id);
     $dbq->add_relation('r.entity_a = ' . $entity_id);
     $dbq->add_relation('r.entity_b = i.id');
     $dbq->add_relation('i.id = m.id');
     $res = db_query($dbq->get_query(), 'Error retrieving images');
     while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
         $this->images[$row['id']] = $row;
     }
 }
Esempio n. 4
0
/**
 * Determines if a site shares a type
 * @param integer $site_id the id of the site
 * @param integer $type_id the id of the type
 * @return bool $site_shares_type true if site shares type, false if it does not
 */
function site_shares_type($site_id, $type_id)
{
    static $retrieved;
    if (!isset($retrieved[$site_id][$type_id])) {
        $dbq = new DBSelector();
        $dbq->add_table('ar', 'allowable_relationship');
        $dbq->add_table('r', 'relationship');
        $dbq->add_relation('ar.name = "site_shares_type"');
        $dbq->add_relation('r.type = ar.id');
        $dbq->add_relation('r.entity_a = ' . $site_id);
        $dbq->add_relation('r.entity_b = ' . $type_id);
        $q = $dbq->get_query();
        $r = db_query($q, 'Failed determination of site\'s sharing status.');
        if (mysql_num_rows($r) > 0) {
            $retrieved[$site_id][$type_id] = true;
        } else {
            $retrieved[$site_id][$type_id] = false;
        }
    }
    return $retrieved[$site_id][$type_id];
}
Esempio n. 5
0
 function get_relationships($dir = 'left')
 {
     $q = new DBSelector();
     $q->add_table('ar', 'allowable_relationship');
     $q->add_table('e', 'entity');
     //$q->add_table( 'site_own_alrel', 'allowable_relationship' );
     //$q->add_table( 'r', 'relationship' );
     $q->add_field('ar', '*');
     $q->add_field('e', 'name', 'entity_name');
     if ($dir == 'left') {
         $q->add_relation('ar.relationship_a = ' . $this->admin_page->type_id);
         $q->add_relation('ar.relationship_b = e.id');
         if (!reason_relationship_names_are_unique()) {
             $q->add_relation('ar.name != "borrows"');
         } else {
             $q->add_relation('ar.type != "borrows"');
         }
     } elseif ($dir == 'right') {
         $q->add_relation('ar.relationship_a = e.id');
         $q->add_relation('ar.relationship_b = ' . $this->admin_page->type_id);
     }
     if (!reason_relationship_names_are_unique()) {
         $q->add_relation('ar.name != "owns"');
         $q->add_relation('ar.name NOT LIKE "%archive%"');
     } else {
         $q->add_relation('ar.type != "owns"');
         $q->add_relation('ar.type != "archive"');
     }
     // make sure this site has access to the related type
     // we don't want to be able to associate with types that a site does not have access to
     /*
     $q->add_relation( 'site_own_alrel.relationship_a = '.id_of( 'site' ) );
     $q->add_relation( 'site_own_alrel.relationship_b = '.id_of( 'type' ) );
     $q->add_relation( 'site_own_alrel.name = "site_to_type"' );
     $q->add_relation( 'r.entity_a = '.$this->admin_page->site_id );
     $q->add_relation( 'r.entity_b = e.id' );
     $q->add_relation( 'r.type = site_own_alrel.id' );
     */
     $r = db_query($q->get_query(), 'Unable to get allowable relationships for this type.');
     $x = array();
     while ($row = mysql_fetch_array($r, MYSQL_ASSOC)) {
         $x[] = $row;
     }
     return $x;
 }
Esempio n. 6
0
 /**
  * Gets all relationships where current item is on left side
  * @param $var makes sure current type is in ar.relationship_a by default...not sure if this is non-default somewhere
  */
 function get_backward_rels($var = 'default')
 {
     // get allowable relationships
     $q = new DBSelector();
     $q->add_table('ar', 'allowable_relationship');
     $q->add_table('e', 'entity');
     $q->add_table('site_own_alrel', 'allowable_relationship');
     $q->add_table('r', 'relationship');
     $q->add_field('ar', '*');
     $q->add_field('e', 'name', 'entity_name');
     if ($var == 'default') {
         $q->add_relation('ar.relationship_b = ' . $this->type_id);
     } else {
         $q->add_relation('ar.relationship_b = ' . $this->request[CM_VAR_PREFIX . 'type_id']);
     }
     $q->add_relation('ar.relationship_a = e.id');
     $q->add_relation('ar.directionality = "bidirectional"');
     if (reason_relationship_names_are_unique()) {
         $q->add_relation('ar.type = "association"');
         $q->set_order('ar.id ASC');
     } else {
         $q->add_relation('ar.name != "owns"');
         $q->add_relation('ar.name != "borrows"');
         $q->add_relation('ar.name NOT LIKE "%archive%"');
     }
     // make sure this site has access to the related type
     // we don't want to be able to associate with types that a site does not have access to
     $q->add_relation('site_own_alrel.relationship_a = ' . id_of('site'));
     $q->add_relation('site_own_alrel.relationship_b = ' . id_of('type'));
     $q->add_relation('site_own_alrel.name = "site_to_type"');
     $q->add_relation('r.entity_a = ' . $this->site_id);
     $q->add_relation('r.entity_b = ar.relationship_a');
     $q->add_relation('r.type = site_own_alrel.id');
     $q->add_relation('(ar.custom_associator IS NULL OR ar.custom_associator = "")');
     $r = db_query($q->get_query(), 'Unable to get allowable relationships for this type.');
     $x = array();
     while ($row = mysql_fetch_array($r, MYSQL_ASSOC)) {
         $x[] = $row;
     }
     $this->reverse_associations = $x;
     return $x;
 }
Esempio n. 7
0
 /**
  * Initialize the _right_relationships and _right_relationships_info arrays
  * @access private
  * @todo cache db structure info so it doesn't need to rediscover it every time
  */
 function _init_right_relationships()
 {
     //first, get relationship types
     $dbq = new DBSelector();
     $dbq->add_field('allow', '*');
     $dbq->add_table('allow', 'allowable_relationship');
     $dbq->add_table('entity', 'entity');
     $dbq->add_relation('entity.id = ' . $this->_id);
     $dbq->add_relation('entity.type = allow.relationship_b');
     // we think this should be commented out.  it makes an error not appear.  you probably want more than that.  i don't have it.
     //$dbq->add_relation( 'entity.state = "Live"' );
     $r1 = db_query($dbq->get_query(), 'Entity Error:  Could not get relationships');
     $rel_name = array();
     while ($row = mysql_fetch_array($r1, MYSQL_ASSOC)) {
         $this->_right_relationships[$row['id']] = array();
         $this->_right_relationships[$row['name']] = array();
         $this->_right_relationships_info[$row['id']] = array();
         $this->_right_relationships_info[$row['name']] = array();
         $rel_name[$row['id']] = $row['name'];
     }
     $dbq = new DBSelector();
     $dbq->add_table('r', 'relationship');
     $dbq->add_field('r', '*');
     $dbq->add_table('entity', 'entity');
     $dbq->add_relation('entity.state = "Live"');
     $dbq->add_relation('entity.id = r.entity_a');
     $dbq->add_relation('r.entity_b = ' . $this->id());
     if ($this->_env['restrict_site'] and !empty($this->_env['site'])) {
         $dbq->add_relation('(r.site=0 OR r.site=' . $this->_env['site'] . ')');
     }
     $dbq->set_order('rel_sort_order');
     $rels = $dbq->run();
     foreach ($rels as $r) {
         $e = new entity($r['entity_a']);
         $this->_right_relationships[$r['type']][] = $e;
         $this->_right_relationships_info[$r['type']][] = $r;
         if (!empty($rel_name[$r['type']])) {
             $this->_right_relationships[$rel_name[$r['type']]][] = $e;
             $this->_right_relationships_info[$rel_name[$r['type']]][] = $r;
         }
     }
 }
Esempio n. 8
0
 function check_required_relationships()
 {
     foreach ($this->req_rels as $rel) {
         $d = new DBSelector();
         $d->add_table('r', 'relationship');
         $d->add_table('ar', 'allowable_relationship');
         $d->add_relation('r.type = ar.id');
         $d->add_relation('ar.id = ' . $rel['id']);
         $d->add_relation('r.entity_a = ' . $this->admin_page->id);
         $r = db_query($d->get_query(), "Can't do query in FinishModule::check_required_relationships()");
         if (!($row = mysql_fetch_array($r))) {
             $link = $this->admin_page->make_link(array('cur_module' => 'Associator', 'rel_id' => $rel['id'], 'error_message' => 1));
             header('Location: ' . unhtmlentities($link));
             die('');
         }
     }
 }