List of deprecated fields is checked
This commit is contained in:
		
					parent
					
						
							
								c1d99d6c4c
							
						
					
				
			
			
				commit
				
					
						08317036e7
					
				
			
		
					 4 changed files with 56 additions and 92 deletions
				
			
		|  | @ -98,14 +98,6 @@ class Item | |||
| 			'author-id', 'author-link', 'owner-link', 'contact-uid', | ||||
| 			'signed_text', 'network']; | ||||
| 
 | ||||
| 	// Field list for "post-content" table that is mixed with the item table
 | ||||
| 	const MIXED_CONTENT_FIELDLIST = ['title', 'content-warning', 'body', 'location', | ||||
| 			'coord', 'app', 'rendered-hash', 'rendered-html', 'verb', | ||||
| 			'object-type', 'object', 'target-type', 'target', 'plink']; | ||||
| 
 | ||||
| 	// Field list for "post-content" table that is not present in the "item" table
 | ||||
| 	const CONTENT_FIELDLIST = ['language', 'raw-body']; | ||||
| 
 | ||||
| 	// All fields in the item table
 | ||||
| 	const ITEM_FIELDLIST = ['id', 'uid', 'parent', 'uri', 'parent-uri', 'thr-parent', | ||||
| 			'guid', 'uri-id', 'parent-uri-id', 'thr-parent-id', 'vid', | ||||
|  | @ -120,6 +112,22 @@ class Item | |||
| 			'author-id', 'author-link', 'author-name', 'author-avatar', 'author-network', | ||||
| 			'owner-id', 'owner-link', 'owner-name', 'owner-avatar', 'causer-id']; | ||||
| 
 | ||||
| 	// Item fiels that still are in use
 | ||||
| 	const USED_FIELDLIST = ['id', 'parent', 'guid', 'uri', 'uri-id', 'parent-uri', 'parent-uri-id', | ||||
| 		'thr-parent', 'thr-parent-id', 'created', 'edited', 'commented', 'received', 'changed', | ||||
| 		'gravity', 'network', 'owner-id', 'author-id', 'causer-id', 'vid', 'extid', 'post-type', | ||||
| 		'global', 'private', 'visible', 'moderated', 'deleted', 'uid', 'contact-id', | ||||
| 		'wall', 'origin', 'pubmail', 'starred', 'unseen', 'mention', 'forum_mode', 'psid', | ||||
| 		'event-id', 'type', 'bookmark']; | ||||
| 
 | ||||
| 	// Legacy item fields that aren't stored any more in the item table
 | ||||
| 	const LEGACY_FIELDLIST = ['uri-hash', 'iaid', 'icid', 'attach', | ||||
| 		'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid', 'postopts',  | ||||
| 		'resource-id', 'inform', 'file', 'location', 'coord', 'tag', 'plink',  | ||||
| 		'title', 'content-warning', 'body', 'app', 'verb', 'object-type', 'object',  | ||||
| 		'target-type', 'target', 'author-name', 'author-link', 'author-avatar',  | ||||
| 		'owner-name', 'owner-link', 'owner-avatar', 'rendered-hash', 'rendered-html']; | ||||
| 
 | ||||
| 	// List of all verbs that don't need additional content data.
 | ||||
| 	// Never reorder or remove entries from this list. Just add new ones at the end, if needed.
 | ||||
| 	const ACTIVITIES = [ | ||||
|  | @ -897,26 +905,11 @@ class Item | |||
| 
 | ||||
| 			// Update the contact relations
 | ||||
| 			Contact\Relation::store($toplevel_parent['author-id'], $item['author-id'], $item['created']); | ||||
| 
 | ||||
| 			unset($item['parent_origin']); | ||||
| 		} else { | ||||
| 			$parent_id = 0; | ||||
| 			$parent_origin = $item['origin']; | ||||
| 		} | ||||
| 
 | ||||
| 		// We don't store the causer link, only the id
 | ||||
| 		unset($item['causer-link']); | ||||
| 
 | ||||
| 		// We don't store these fields anymore in the item table
 | ||||
| 		unset($item['author-link']); | ||||
| 		unset($item['author-name']); | ||||
| 		unset($item['author-avatar']); | ||||
| 		unset($item['author-network']); | ||||
| 
 | ||||
| 		unset($item['owner-link']); | ||||
| 		unset($item['owner-name']); | ||||
| 		unset($item['owner-avatar']); | ||||
| 
 | ||||
| 		$item['parent-uri-id'] = ItemURI::getIdByURI($item['parent-uri']); | ||||
| 		$item['thr-parent-id'] = ItemURI::getIdByURI($item['thr-parent']); | ||||
| 
 | ||||
|  | @ -939,14 +932,10 @@ class Item | |||
| 			$item['edit'] = false; | ||||
| 			$item['parent'] = $parent_id; | ||||
| 			Hook::callAll('post_local', $item); | ||||
| 			unset($item['edit']); | ||||
| 		} else { | ||||
| 			Hook::callAll('post_remote', $item); | ||||
| 		} | ||||
| 
 | ||||
| 		// Set after the insert because top-level posts are self-referencing
 | ||||
| 		unset($item['parent']); | ||||
| 
 | ||||
| 		if (!empty($item['cancel'])) { | ||||
| 			Logger::log('post cancelled by addon.'); | ||||
| 			return 0; | ||||
|  | @ -965,15 +954,6 @@ class Item | |||
| 			$item['deny_gid'] | ||||
| 		); | ||||
| 
 | ||||
| 		unset($item['allow_cid']); | ||||
| 		unset($item['allow_gid']); | ||||
| 		unset($item['deny_cid']); | ||||
| 		unset($item['deny_gid']); | ||||
| 
 | ||||
| 		// This array field is used to trigger some automatic reactions
 | ||||
| 		// It is mainly used in the "post_local" hook.
 | ||||
| 		unset($item['api_source']); | ||||
| 
 | ||||
| 		if ($item['verb'] == Activity::ANNOUNCE) { | ||||
| 			self::setOwnerforResharedItem($item); | ||||
| 		} | ||||
|  | @ -985,10 +965,6 @@ class Item | |||
| 		// Check for hashtags in the body and repair or add hashtag links
 | ||||
| 		$item['body'] = self::setHashtags($item['body']); | ||||
| 
 | ||||
| 		if (!empty($item['attach'])) { | ||||
| 			Post\Media::insertFromAttachment($item['uri-id'], $item['attach']); | ||||
| 		} | ||||
| 
 | ||||
| 		// Fill the cache field
 | ||||
| 		self::putInCache($item); | ||||
| 
 | ||||
|  | @ -998,40 +974,27 @@ class Item | |||
| 			$notify_type = Delivery::POST; | ||||
| 		} | ||||
| 
 | ||||
| 		// Filling item related side tables
 | ||||
| 		if (!empty($item['attach'])) { | ||||
| 			Post\Media::insertFromAttachment($item['uri-id'], $item['attach']); | ||||
| 		} | ||||
| 
 | ||||
| 		if (!in_array($item['verb'], self::ACTIVITIES)) { | ||||
| 			Post\Content::insert($item['uri-id'], $item); | ||||
| 		} | ||||
| 
 | ||||
| 		$body = $item['body']; | ||||
| 		$verb = $item['verb']; | ||||
| 
 | ||||
| 		// We just remove everything that is content
 | ||||
| 		foreach (array_merge(self::CONTENT_FIELDLIST, self::MIXED_CONTENT_FIELDLIST) as $field) { | ||||
| 			unset($item[$field]); | ||||
| 		} | ||||
| 
 | ||||
| 		unset($item['activity']); | ||||
| 
 | ||||
| 		// Filling item related side tables
 | ||||
| 
 | ||||
| 		// Diaspora signature
 | ||||
| 		if (!empty($item['diaspora_signed_text'])) { | ||||
| 			DBA::replace('diaspora-interaction', ['uri-id' => $item['uri-id'], 'interaction' => $item['diaspora_signed_text']]); | ||||
| 		} | ||||
| 
 | ||||
| 		unset($item['diaspora_signed_text']); | ||||
| 
 | ||||
| 		// Attached file links
 | ||||
| 		if (!empty($item['file'])) { | ||||
| 			Post\Category::storeTextByURIId($item['uri-id'], $item['uid'], $item['file']); | ||||
| 		} | ||||
| 
 | ||||
| 		unset($item['file']); | ||||
| 
 | ||||
| 		// Delivery relevant data
 | ||||
| 		$delivery_data = Post\DeliveryData::extractFields($item); | ||||
| 		unset($item['postopts']); | ||||
| 		unset($item['inform']); | ||||
| 
 | ||||
| 		if (!empty($item['origin']) || !empty($item['wall']) || !empty($delivery_data['postopts']) || !empty($delivery_data['inform'])) { | ||||
| 			Post\DeliveryData::insert($item['uri-id'], $delivery_data); | ||||
|  | @ -1039,33 +1002,38 @@ class Item | |||
| 
 | ||||
| 		// Store tags from the body if this hadn't been handled previously in the protocol classes
 | ||||
| 		if (!Tag::existsForPost($item['uri-id'])) { | ||||
| 			Tag::storeFromBody($item['uri-id'], $body); | ||||
| 			Tag::storeFromBody($item['uri-id'], $item['body']); | ||||
| 		} | ||||
| 
 | ||||
| 		$id = Post\User::insert($item['uri-id'], $item['uid'], $item); | ||||
| 		if ($id) { | ||||
| 			if ($item['gravity'] == GRAVITY_PARENT) { | ||||
| 				Post\ThreadUser::insert($item['uri-id'], $item['uid'], $item); | ||||
| 			} | ||||
| 
 | ||||
| 			$condition = ['uri-id' => $item['uri-id'], 'uid' => $item['uid'], 'network' => $item['network']]; | ||||
| 			if (Post::exists($condition)) { | ||||
| 				Logger::notice('Item is already inserted - aborting', $condition); | ||||
| 				return 0; | ||||
| 			} | ||||
| 
 | ||||
| 			// Remove all fields that aren't part of the item table
 | ||||
| 			$item = DBStructure::getFieldsForTable('item', $item); | ||||
| 
 | ||||
| 			$result = DBA::insert('item', $item); | ||||
| 
 | ||||
| 			// When the item was successfully stored we fetch the ID of the item.
 | ||||
| 			$current_post = DBA::lastInsertId(); | ||||
| 		} else { | ||||
| 		if (!$id) { | ||||
| 			Logger::notice('Post-User is already inserted - aborting', ['uid' => $item['uid'], 'uri-id' => $item['uri-id']]); | ||||
| 			return 0; | ||||
| 		} | ||||
| 
 | ||||
| 		if ($item['gravity'] == GRAVITY_PARENT) { | ||||
| 			Post\ThreadUser::insert($item['uri-id'], $item['uid'], $item); | ||||
| 		} | ||||
| 
 | ||||
| 		$condition = ['uri-id' => $item['uri-id'], 'uid' => $item['uid'], 'network' => $item['network']]; | ||||
| 		if (Post::exists($condition)) { | ||||
| 			Logger::notice('Item is already inserted - aborting', $condition); | ||||
| 			return 0; | ||||
| 		} | ||||
| 
 | ||||
| 		// Remove all fields that aren't part of the item table
 | ||||
| 		$item = DBStructure::getFieldsForTable('item', $item); | ||||
| 
 | ||||
| 		// We remove all legacy fields that now are stored in other tables
 | ||||
| 		foreach (self::LEGACY_FIELDLIST as $field) { | ||||
| 			unset($item[$field]); | ||||
| 		} | ||||
| 
 | ||||
| 		$result = DBA::insert('item', $item); | ||||
| 
 | ||||
| 		// When the item was successfully stored we fetch the ID of the item.
 | ||||
| 		$current_post = DBA::lastInsertId(); | ||||
| 
 | ||||
| 		if (empty($current_post) || !DBA::isResult($result)) { | ||||
| 			// On failure store the data into a spool file so that the "SpoolPost" worker can try again later.
 | ||||
| 			Logger::warning('Could not store item. it will be spooled', ['result' => $result, 'id' => $current_post]); | ||||
|  | @ -1091,7 +1059,7 @@ class Item | |||
| 			$update_commented = in_array($item['gravity'], [GRAVITY_PARENT, GRAVITY_COMMENT]); | ||||
| 		} else { | ||||
| 			// Update when it isn't a follow or tag verb
 | ||||
| 			$update_commented = !in_array($verb, [Activity::FOLLOW, Activity::TAG]); | ||||
| 			$update_commented = !in_array($item['verb'], [Activity::FOLLOW, Activity::TAG]); | ||||
| 		} | ||||
| 
 | ||||
| 		if ($update_commented) { | ||||
|  |  | |||
|  | @ -192,7 +192,7 @@ class Post | |||
| 			$selected = array_merge(['author-addr', 'author-nick', 'owner-addr', 'owner-nick', 'causer-addr', 'causer-nick', | ||||
| 				'causer-network', 'photo', 'name-date', 'uri-date', 'avatar-date', 'thumb', 'dfrn-id', | ||||
| 				'parent-guid', 'parent-network', 'parent-author-id', 'parent-author-link', 'parent-author-name', | ||||
| 				'parent-author-network', 'signed_text'], Item::DISPLAY_FIELDLIST, Item::ITEM_FIELDLIST, Item::CONTENT_FIELDLIST); | ||||
| 				'parent-author-network', 'signed_text', 'language', 'raw-body'], Item::DISPLAY_FIELDLIST, Item::ITEM_FIELDLIST); | ||||
| 			 | ||||
| 			if ($view == 'post-thread-view') { | ||||
| 				$selected = array_merge($selected, ['ignored', 'iid']); | ||||
|  | @ -479,13 +479,8 @@ class Post | |||
| 			$affected = max($affected, DBA::affectedRows()); | ||||
| 		} | ||||
| 
 | ||||
| 		$item_fields = ['guid', 'type', 'wall', 'gravity', 'extid', 'created', 'edited', 'commented', 'received', 'changed', | ||||
| 			'resource-id', 'post-type', 'private', 'pubmail', 'moderated', 'visible', 'starred', 'bookmark', | ||||
| 			'unseen', 'deleted', 'origin', 'forum_mode', 'mention', 'global', 'network', 'vid', 'psid', | ||||
| 			'contact-id', 'author-id', 'owner-id', 'causer-id', 'event-id']; | ||||
| 
 | ||||
| 		$update_fields = []; | ||||
| 		foreach ($item_fields as $field) { | ||||
| 		foreach (Item::USED_FIELDLIST as $field) { | ||||
| 			if (array_key_exists($field, $fields)) { | ||||
| 				$update_fields[$field] = $fields[$field]; | ||||
| 			} | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue