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; } }
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; } }
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; } }
/** * 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]; }
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; }
/** * 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; }
/** * 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; } } }
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(''); } } }