Ticket #4636: 4636.02.patch
File 4636.02.patch, 5.9 KB (added by , 11 years ago) |
---|
-
bp-xprofile/bp-xprofile-activity.php
diff --git a/bp-xprofile/bp-xprofile-activity.php b/bp-xprofile/bp-xprofile-activity.php index 01ffcc3..3c53ff0 100644
a b function bp_xprofile_new_avatar_activity() { 132 132 ) ); 133 133 } 134 134 add_action( 'xprofile_avatar_uploaded', 'bp_xprofile_new_avatar_activity' ); 135 136 /** 137 * Add an activity item when a user has updated his profile. 138 * 139 * @since BuddyPress (2.0.0) 140 * 141 * @param int $user_id ID of the user who has updated his profile. 142 * @param array $field_ids IDs of the fields submitted. 143 * @param bool $errors True if validation or saving errors occurred, otherwise 144 * false. 145 * @return bool True on success, false on failure. 146 */ 147 function bp_xprofile_updated_profile_activity( $user_id, $field_ids, $errors ) { 148 // If there were errors, don't post 149 if ( ! empty( $errors ) ) { 150 return false; 151 } 152 153 // Throttle to one activity of this type per 2 hours 154 $existing = bp_activity_get( array( 155 'max' => 1, 156 'filter' => array( 157 'user_id' => $user_id, 158 'object' => buddypress()->profile->id, 159 'action' => 'updated_profile', 160 ), 161 ) ); 162 163 if ( empty( $existing['activities'] ) ) { 164 $throttle = false; 165 } else { 166 // Default throttle time is 2 hours. Filter to change (in seconds) 167 $throttle_period = apply_filters( 'bp_xprofile_updated_profile_activity_throttle_time', 60*60*2 ); 168 $then = strtotime( $existing['activities'][0]->date_recorded ); 169 $now = strtotime( bp_core_current_time() ); 170 171 $throttle = ( $now - $then ) < $throttle_period; 172 } 173 174 if ( $throttle ) { 175 return false; 176 } 177 178 // If we've reached this point, assemble and post the activity item 179 180 // Note for translators: The natural phrasing in English, "Joe updated 181 // his profile", requires that we know Joe's gender, which we don't. If 182 // your language doesn't have this restriction, feel free to use a more 183 // natural translation. 184 $profile_link = trailingslashit( bp_core_get_user_domain( $user_id ) . buddypress()->profile->slug ); 185 $action = sprintf( __( '%1$s’s profile was updated', 'buddypress' ), '<a href="' . $profile_link . '">' . bp_core_get_user_displayname( $user_id ) . '</a>' ); 186 187 $retval = xprofile_record_activity( array( 188 'user_id' => $user_id, 189 'action' => $action, 190 'primary_link' => $profile_link, 191 'component' => buddypress()->profile->id, 192 'type' => 'updated_profile', 193 ) ); 194 195 return (bool) $retval; 196 } 197 add_action( 'xprofile_updated_profile', 'bp_xprofile_updated_profile_activity', 10, 3 ); 198 199 /** 200 * Add filters for xprofile activity types to Show dropdowns. 201 * 202 * @since BuddyPress (2.0.0) 203 */ 204 function xprofile_activity_filter_options() { 205 ?> 206 207 <option value="updated_profile"><?php _e( 'Profile Updates', 'buddypress' ) ?></option> 208 209 <?php 210 } 211 add_action( 'bp_activity_filter_options', 'xprofile_activity_filter_options' ); -
new file tests/testcases/xprofile/activity.php
diff --git a/tests/testcases/xprofile/activity.php b/tests/testcases/xprofile/activity.php new file mode 100644 index 0000000..16a2169
- + 1 <?php 2 3 /** 4 * @group xprofile 5 * @group activity 6 */ 7 class BP_Tests_XProfile_Activity extends BP_UnitTestCase { 8 protected $updated_profile_data = array(); 9 10 /** 11 * @group bp_xprofile_updated_profile_activity 12 */ 13 public function test_bp_xprofile_updated_profile_activity_with_errors() { 14 $d = $this->setup_updated_profile_data(); 15 $this->assertFalse( bp_xprofile_updated_profile_activity( $d['u'], array( $d['f']->id ), true ) ); 16 } 17 18 /** 19 * @group bp_xprofile_updated_profile_activity 20 */ 21 public function test_bp_xprofile_updated_profile_activity_throttled() { 22 $d = $this->setup_updated_profile_data(); 23 24 $time = time(); 25 $prev_time = date( 'Y-m-d h:i:s', $time - ( 119 * 60 ) ); 26 $now_time = date( 'Y-m-d h:i:s', $time ); 27 28 $this->factory->activity->create( array( 29 'user_id' => $d['u'], 30 'component' => buddypress()->profile->id, 31 'type' => 'updated_profile', 32 'date_recorded' => $prev_time, 33 ) ); 34 35 $this->assertFalse( bp_xprofile_updated_profile_activity( $d['u'], array( $d['f']->id ), false ) ); 36 } 37 38 /** 39 * @group bp_xprofile_updated_profile_activity 40 */ 41 public function test_bp_xprofile_updated_profile_activity_outside_of_throttle() { 42 $d = $this->setup_updated_profile_data(); 43 44 $time = time(); 45 $prev_time = date( 'Y-m-d h:i:s', $time - ( 121 * 60 ) ); 46 $now_time = date( 'Y-m-d h:i:s', $time ); 47 48 $this->factory->activity->create( array( 49 'user_id' => $d['u'], 50 'component' => buddypress()->profile->id, 51 'type' => 'updated_profile', 52 'recorded_time' => $prev_time, 53 ) ); 54 55 $this->assertTrue( bp_xprofile_updated_profile_activity( $d['u'], array( $d['f']->id ), false ) ); 56 57 $existing = bp_activity_get( array( 58 'max' => 1, 59 'filter' => array( 60 'user_id' => $user_id, 61 'object' => buddypress()->profile->id, 62 'action' => 'updated_profile', 63 ), 64 ) ); 65 66 $this->assertEquals( 1, $existing['total'] ); 67 } 68 69 /** 70 * @group bp_xprofile_updated_profile_activity 71 */ 72 public function test_bp_xprofile_updated_profile_activity_no_existing_activity() { 73 $d = $this->setup_updated_profile_data(); 74 75 $this->assertTrue( bp_xprofile_updated_profile_activity( $d['u'], array( $d['f']->id ), false ) ); 76 77 $existing = bp_activity_get( array( 78 'max' => 1, 79 'filter' => array( 80 'user_id' => $user_id, 81 'object' => buddypress()->profile->id, 82 'action' => 'updated_profile', 83 ), 84 ) ); 85 86 $this->assertEquals( 1, $existing['total'] ); 87 } 88 89 protected function setup_updated_profile_data() { 90 $this->updated_profile_data['u'] = $this->create_user(); 91 $this->updated_profile_data['g'] = $this->factory->xprofile_group->create(); 92 $this->updated_profile_data['f'] = $this->factory->xprofile_field->create( array( 93 'type' => 'textbox', 94 'field_group_id' => $this->updated_profile_data['g']->id, 95 ) ); 96 97 } 98 }