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()); }