- public static function getNameTypeId($type, $for_sql = false)
- {
- if (!S::has('name_types')) {
- $table = XDB::fetchAllAssoc('type', 'SELECT id, type
- FROM profile_name_enum');
- S::set('name_types', $table);
- } else {
- $table = S::v('name_types');
- }
- if ($for_sql) {
- return XDB::escape($table[$type]);
- } else {
- return $table[$type];
- }
- }
-
- public static function rebuildSearchTokens($pid)
- {
- XDB::execute('DELETE FROM search_name
- WHERE pid = {?}',
- $pid);
- $keys = XDB::iterator("SELECT CONCAT(n.particle, n.name) AS name, e.score,
- FIND_IN_SET('public', e.flags) AS public
- FROM profile_name AS n
- INNER JOIN profile_name_enum AS e ON (n.typeid = e.id)
- WHERE n.pid = {?}",
- $pid);
-
+ /** Returns the closest "accounts only" name type for $name
+ */
+ public static function getAccountEquivalentName($name)
+ {
+ switch ($name)
+ {
+ case self::DN_DIRECTORY:
+ case self::DN_SORT:
+ return 'directory_name';
+ case self::DN_FULL:
+ case self::DN_PUBLIC:
+ return 'full_name';
+ case self::DN_PRIVATE:
+ case self::DN_SHORT:
+ case self::DN_YOURSELF:
+ default:
+ return 'display_name';
+ }
+ }
+
+ public static function rebuildSearchTokens($pids, $transaction = true)
+ {
+ require_once 'name.func.inc.php';
+ if (!is_array($pids)) {
+ $pids = array($pids);
+ }
+ $keys = XDB::iterator("(SELECT pid, name, type, IF(type = 'nickname', 2, 1) AS score, '' AS public
+ FROM profile_private_names
+ WHERE pid IN {?})
+ UNION
+ (SELECT pid, lastname_main, 'lastname' AS type, 10 AS score, 'public' AS public
+ FROM profile_public_names
+ WHERE lastname_main != '' AND pid IN {?})
+ UNION
+ (SELECT pid, lastname_marital, 'lastname' AS type, 10 AS score, 'public' AS public
+ FROM profile_public_names
+ WHERE lastname_marital != '' AND pid IN {?})
+ UNION
+ (SELECT pid, lastname_ordinary, 'lastname' AS type, 10 AS score, 'public' AS public
+ FROM profile_public_names
+ WHERE lastname_ordinary != '' AND pid IN {?})
+ UNION
+ (SELECT pid, firstname_main, 'firstname' AS type, 10 AS score, 'public' AS public
+ FROM profile_public_names
+ WHERE firstname_main != '' AND pid IN {?})
+ UNION
+ (SELECT pid, firstname_ordinary, 'firstname' AS type, 10 AS score, 'public' AS public
+ FROM profile_public_names
+ WHERE firstname_ordinary != '' AND pid IN {?})
+ UNION
+ (SELECT pid, pseudonym, 'nickname' AS type, 10 AS score, 'public' AS public
+ FROM profile_public_names
+ WHERE pseudonym != '' AND pid IN {?})",
+ $pids, $pids, $pids, $pids, $pids, $pids, $pids);
+ $names = array();