Пример #1
0
function clean_relationships_for_sync($module_name, $related_module)
{
    if (strtolower($related_module) != 'emailaddresses') {
        global $beanList, $dictionary;
        $result_list = array();
        if (empty($beanList[$module_name]) || empty($beanList[$related_module])) {
            return false;
        }
        $row = retrieve_relationships_properties($module_name, $related_module);
        if (empty($row)) {
            return false;
        }
        if ($module_name == $row['lhs_module']) {
            $module_1 = $module_name;
            $module_2 = $related_module;
        } else {
            $module_2 = $module_name;
            $module_1 = $related_module;
        }
        $table = $row['join_table'];
        $mod = BeanFactory::getBean($module_1);
        $db = DBManagerFactory::getInstance();
        $db->commit();
        $db->query($db->truncateTableSQL($table));
    }
    return true;
}
function retrieve_relationship_query($module_name, $related_module, $relationship_query, $show_deleted, $offset, $max_results)
{
    global $beanList, $beanFiles, $dictionary, $current_user;
    $error = new SoapError();
    $result_list = array();
    if (empty($beanList[$module_name]) || empty($beanList[$related_module])) {
        $error->set_error('no_module');
        return array('query' => "", 'module_1' => "", 'join_table' => "", 'error' => $error->get_soap_array());
    }
    $row = retrieve_relationships_properties($module_name, $related_module);
    if (empty($row)) {
        $error->set_error('no_relationship_support');
        return array('query' => "", 'module_1' => "", 'join_table' => "", 'error' => $error->get_soap_array());
    }
    $module_1 = $row['lhs_module'];
    $mod_key = $row['join_key_lhs'];
    $module_2 = $row['rhs_module'];
    $mod2_key = $row['join_key_rhs'];
    $table = $row['join_table'];
    if (empty($table)) {
        return array('query' => "", 'module_1' => "", 'join_table' => "", 'error' => $error->get_soap_array());
    }
    $class_name = $beanList[$module_1];
    require_once $beanFiles[$class_name];
    $mod = new $class_name();
    $mod2_name = $beanList[$module_2];
    require_once $beanFiles[$mod2_name];
    $mod2 = new $mod2_name();
    $query = "SELECT rt.* FROM  {$table} rt ";
    $query .= " inner join {$mod->table_name} m1 on rt.{$mod_key} = m1.id ";
    $query .= " inner join {$mod2->table_name} m2 on rt.{$mod2_key} = m2.id  ";
    if (!empty($relationship_query)) {
        $query .= ' WHERE ' . $relationship_query;
    }
    return array('query' => $query, 'module_1' => $module_1, 'join_table' => $table, 'error' => $error->get_soap_array());
}
function retrieve_relationship_query($module_name, $related_module, $relationship_query, $show_deleted, $offset, $max_results)
{
    global $beanList, $beanFiles, $dictionary, $current_user;
    $error = new SoapError();
    $result_list = array();
    if (empty($beanList[$module_name]) || empty($beanList[$related_module])) {
        $error->set_error('no_module');
        return array('query' => "", 'module_1' => "", 'join_table' => "", 'error' => $error->get_soap_array());
    }
    $row = retrieve_relationships_properties($module_name, $related_module);
    if (empty($row)) {
        $error->set_error('no_relationship_support');
        return array('query' => "", 'module_1' => "", 'join_table' => "", 'error' => $error->get_soap_array());
    }
    $module_1 = $row['lhs_module'];
    $mod_key = $row['join_key_lhs'];
    $module_2 = $row['rhs_module'];
    $mod2_key = $row['join_key_rhs'];
    $table = $row['join_table'];
    if (empty($table)) {
        return array('query' => "", 'module_1' => "", 'join_table' => "", 'error' => $error->get_soap_array());
    }
    $mod = BeanFactory::getBean($module_1);
    $mod2 = BeanFactory::getBean($module_2);
    $query = "SELECT rt.* FROM  {$table} rt ";
    $query .= " inner join {$mod->table_name} m1 on rt.{$mod_key} = m1.id ";
    $query .= " inner join {$mod2->table_name} m2 on rt.{$mod2_key} = m2.id  ";
    //rrs bug: 29890 - if record on Offline Client is assigned to a team the user does not have access to
    //then it will not sync to server, but the relationship will.  We will assume the user would like to ignore team
    //level security; however, I have added it as an variable "DISABLE_ROW_LEVEL_SECURITY" to this file (see above) so that it can be changed
    //by the server and synced down.
    if (defined('DISABLE_ROW_LEVEL_SECURITY')) {
        $mod->disable_row_level_security = DISABLE_ROW_LEVEL_SECURITY;
        $mod2->disable_row_level_security = DISABLE_ROW_LEVEL_SECURITY;
    }
    if (!$mod->disable_row_level_security) {
        if (!empty($mod->field_defs['team_id'])) {
            $query .= " INNER JOIN (select tst.team_set_id from team_sets_teams tst ";
            $query .= " INNER JOIN team_memberships tm1 ON tst.team_id = tm1.team_id\n\t\t\t\t\t                       AND tm1.user_id = '{$current_user->id}'\n\t\t\t\t\t\t                   AND tm1.deleted=0 group by tst.team_set_id) m1_tf on m1_tf.team_set_id  = m1.team_set_id ";
        }
    }
    if (!$mod2->disable_row_level_security) {
        if (!empty($mod2->field_defs['team_id'])) {
            $query .= " INNER JOIN (select tst.team_set_id from team_sets_teams tst ";
            $query .= " INNER JOIN team_memberships tm2 ON tst.team_id = tm2.team_id\n\t\t\t\t\t                       AND tm2.user_id = '{$current_user->id}'\n\t\t\t\t\t\t                   AND tm2.deleted=0 group by tst.team_set_id) m2_tf on m2_tf.team_set_id  = m2.team_set_id ";
        }
    }
    if (!empty($relationship_query)) {
        $query .= ' WHERE ' . $relationship_query;
    }
    return array('query' => $query, 'module_1' => $module_1, 'join_table' => $table, 'error' => $error->get_soap_array());
}