Changeset 20137 for trunk/wp-includes/class-wp-xmlrpc-server.php
- Timestamp:
- 03/07/2012 05:02:22 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/wp-includes/class-wp-xmlrpc-server.php
r20075 r20137 42 42 'wp.getPost' => 'this:wp_getPost', 43 43 'wp.getPosts' => 'this:wp_getPosts', 44 'wp.newTerm' => 'this:wp_newTerm', 45 'wp.editTerm' => 'this:wp_editTerm', 46 'wp.deleteTerm' => 'this:wp_deleteTerm', 47 'wp.getTerm' => 'this:wp_getTerm', 48 'wp.getTerms' => 'this:wp_getTerms', 49 'wp.getTaxonomy' => 'this:wp_getTaxonomy', 50 'wp.getTaxonomies' => 'this:wp_getTaxonomies', 44 51 'wp.getPage' => 'this:wp_getPage', 45 52 'wp.getPages' => 'this:wp_getPages', … … 478 485 479 486 /** 487 * Prepares taxonomy data for return in an XML-RPC object. 488 * 489 * @access protected 490 .* 491 * @param array|object $taxonomy The unprepared taxonomy data 492 * @return array The prepared taxonomy data 493 */ 494 protected function _prepare_taxonomy( $taxonomy ) { 495 $_taxonomy = (array) $taxonomy; 496 497 unset( $_taxonomy['update_count_callback'] ); 498 499 return apply_filters( 'xmlrpc__prepare_taxonomy', $_taxonomy, $taxonomy ); 500 } 501 502 /** 503 * Prepares term data for return in an XML-RPC object. 504 * 505 * @access protected 506 .* 507 * @param array|object $term The unprepared term data 508 * @return array The prepared term data 509 */ 510 protected function _prepare_term( $term ) { 511 $_term = $term; 512 if ( ! is_array( $_term) ) 513 $_term = get_object_vars( $_term ); 514 515 return apply_filters( 'xmlrpc__prepare_term', $_term, $term ); 516 } 517 518 /** 480 519 * Prepares post data for return in an XML-RPC object. 481 520 * 482 * @access pr ivate521 * @access protected 483 522 * 484 523 * @param array $post The unprepared post data … … 486 525 * @return array The prepared post data 487 526 */ 488 function _prepare_post( $post, $fields ) {527 protected function _prepare_post( $post, $fields ) { 489 528 // holds the data for this post. built up based on $fields 490 529 $_post = array( 'post_id' => $post['ID'] ); … … 534 573 $_post['terms'] = array(); 535 574 foreach ( $terms as $term ) { 536 $_post['terms'][] = (array) $term;575 $_post['terms'][] = $this->_prepare_term( $term ); 537 576 } 538 577 } … … 1107 1146 1108 1147 $struct[] = $this->_prepare_post( $post, $fields ); 1148 } 1149 1150 return $struct; 1151 } 1152 1153 /** 1154 * Create a new term. 1155 * 1156 * @uses wp_insert_term() 1157 * @param array $args Method parameters. Contains: 1158 * - int $blog_id 1159 * - string $username 1160 * - string $password 1161 * - array $content_struct 1162 * The $content_struct must contain: 1163 * - 'name' 1164 * - 'taxonomy' 1165 * Also, it can optionally contain: 1166 * - 'parent' 1167 * - 'description' 1168 * - 'slug' 1169 * @return string term_id 1170 */ 1171 function wp_newTerm( $args ) { 1172 $this->escape( $args ); 1173 1174 $blog_id = (int) $args[0]; 1175 $username = $args[1]; 1176 $password = $args[2]; 1177 $content_struct = $args[3]; 1178 1179 if ( ! $user = $this->login( $username, $password ) ) 1180 return $this->error; 1181 1182 do_action( 'xmlrpc_call', 'wp.newTerm' ); 1183 1184 if ( ! taxonomy_exists( $content_struct['taxonomy'] ) ) 1185 return new IXR_Error( 403, __( 'Invalid taxonomy.' ) ); 1186 1187 $taxonomy = get_taxonomy( $content_struct['taxonomy'] ); 1188 1189 if ( ! current_user_can( $taxonomy->cap->manage_terms ) ) 1190 return new IXR_Error( 401, __( 'You are not allowed to create terms in this taxonomy.' ) ); 1191 1192 $taxonomy = (array) $taxonomy; 1193 1194 // hold the data of the term 1195 $term_data = array(); 1196 1197 $term_data['name'] = trim( $content_struct['name'] ); 1198 if ( empty( $term_data['name'] ) ) 1199 return new IXR_Error( 403, __( 'The term name cannot be empty.' ) ); 1200 1201 if ( isset( $content_struct['parent'] ) ) { 1202 if ( ! $taxonomy['hierarchical'] ) 1203 return new IXR_Error( 403, __( 'This taxonomy is not hierarchical.' ) ); 1204 1205 $parent_term_id = (int) $content_struct['parent']; 1206 $parent_term = get_term( $parent_term_id , $taxonomy['name'] ); 1207 1208 if ( is_wp_error( $parent_term ) ) 1209 return new IXR_Error( 500, $parent_term->get_error_message() ); 1210 1211 if ( ! $parent_term ) 1212 return new IXR_Error( 403, __( 'Parent term does not exist.' ) ); 1213 1214 $term_data['parent'] = $content_struct['parent']; 1215 } 1216 1217 if ( isset( $content_struct['description'] ) ) 1218 $term_data['description'] = $content_struct['description']; 1219 1220 if ( isset( $content_struct['slug'] ) ) 1221 $term_data['slug'] = $content_struct['slug']; 1222 1223 $term = wp_insert_term( $term_data['name'] , $taxonomy['name'] , $term_data ); 1224 1225 if ( is_wp_error( $term ) ) 1226 return new IXR_Error( 500, $term->get_error_message() ); 1227 1228 if ( ! $term ) 1229 return new IXR_Error( 500, __( 'Sorry, your term could not be created. Something wrong happened.' ) ); 1230 1231 return strval( $term['term_id'] ); 1232 } 1233 1234 /** 1235 * Edit a term. 1236 * 1237 * @uses wp_update_term() 1238 * @param array $args Method parameters. Contains: 1239 * - int $blog_id 1240 * - string $username 1241 * - string $password 1242 * - string $term_id 1243 * - array $content_struct 1244 * The $content_struct must contain: 1245 * - 'taxonomy' 1246 * Also, it can optionally contain: 1247 * - 'name' 1248 * - 'parent' 1249 * - 'description' 1250 * - 'slug' 1251 * @return bool True, on success. 1252 */ 1253 function wp_editTerm( $args ) { 1254 $this->escape( $args ); 1255 1256 $blog_id = (int) $args[0]; 1257 $username = $args[1]; 1258 $password = $args[2]; 1259 $term_id = (int) $args[3]; 1260 $content_struct = $args[4]; 1261 1262 if ( ! $user = $this->login( $username, $password ) ) 1263 return $this->error; 1264 1265 do_action( 'xmlrpc_call', 'wp.editTerm' ); 1266 1267 if ( ! taxonomy_exists( $content_struct['taxonomy'] ) ) 1268 return new IXR_Error( 403, __( 'Invalid taxonomy.' ) ); 1269 1270 $taxonomy = get_taxonomy( $content_struct['taxonomy'] ); 1271 1272 if ( ! current_user_can( $taxonomy->cap->edit_terms ) ) 1273 return new IXR_Error( 401, __( 'You are not allowed to edit terms in this taxonomy.' ) ); 1274 1275 $taxonomy = (array) $taxonomy; 1276 1277 // hold the data of the term 1278 $term_data = array(); 1279 1280 $term = get_term( $term_id , $content_struct['taxonomy'] ); 1281 1282 if ( is_wp_error( $term ) ) 1283 return new IXR_Error( 500, $term->get_error_message() ); 1284 1285 if ( ! $term ) 1286 return new IXR_Error( 404, __( 'Invalid term ID.' ) ); 1287 1288 if ( isset( $content_struct['name'] ) ) { 1289 $term_data['name'] = trim( $content_struct['name'] ); 1290 1291 if ( empty( $term_data['name'] ) ) 1292 return new IXR_Error( 403, __( 'The term name cannot be empty.' ) ); 1293 } 1294 1295 if ( isset( $content_struct['parent'] ) ) { 1296 if ( ! $taxonomy['hierarchical'] ) 1297 return new IXR_Error( 403, __( "This taxonomy is not hierarchical so you can't set a parent." ) ); 1298 1299 $parent_term_id = (int) $content_struct['parent']; 1300 $parent_term = get_term( $parent_term_id , $taxonomy['name'] ); 1301 1302 if ( is_wp_error( $parent_term ) ) 1303 return new IXR_Error( 500, $parent_term->get_error_message() ); 1304 1305 if ( ! $parent_term ) 1306 return new IXR_Error( 403, __( 'Parent term does not exist.' ) ); 1307 1308 $term_data['parent'] = $content_struct['parent']; 1309 } 1310 1311 if ( isset( $content_struct['description'] ) ) 1312 $term_data['description'] = $content_struct['description']; 1313 1314 if ( isset( $content_struct['slug'] ) ) 1315 $term_data['slug'] = $content_struct['slug']; 1316 1317 $term = wp_update_term( $term_id , $taxonomy['name'] , $term_data ); 1318 1319 if ( is_wp_error( $term ) ) 1320 return new IXR_Error( 500, $term->get_error_message() ); 1321 1322 if ( ! $term ) 1323 return new IXR_Error( 500, __( 'Sorry, editing the term failed.' ) ); 1324 1325 return true; 1326 } 1327 1328 /** 1329 * Delete a term. 1330 * 1331 * @uses wp_delete_term() 1332 * @param array $args Method parameters. Contains: 1333 * - int $blog_id 1334 * - string $username 1335 * - string $password 1336 * - string $taxnomy_name 1337 * - string $term_id 1338 * @return boolean|IXR_Error If it suceeded true else a reason why not 1339 */ 1340 function wp_deleteTerm( $args ) { 1341 $this->escape( $args ); 1342 1343 $blog_id = (int) $args[0]; 1344 $username = $args[1]; 1345 $password = $args[2]; 1346 $taxonomy_name = $args[3]; 1347 $term_id = (int) $args[4]; 1348 1349 if ( ! $user = $this->login( $username, $password ) ) 1350 return $this->error; 1351 1352 do_action( 'xmlrpc_call', 'wp.deleteTerm' ); 1353 1354 if ( ! taxonomy_exists( $taxonomy_name ) ) 1355 return new IXR_Error( 403, __( 'Invalid taxonomy.' ) ); 1356 1357 $taxonomy = get_taxonomy( $taxonomy_name ); 1358 1359 if ( ! current_user_can( $taxonomy->cap->delete_terms ) ) 1360 return new IXR_Error( 401, __( 'You are not allowed to delete terms in this taxonomy.' ) ); 1361 1362 $term = get_term( $term_id, $taxonomy_name ); 1363 1364 if ( is_wp_error( $term ) ) 1365 return new IXR_Error( 500, $term->get_error_message() ); 1366 1367 if ( ! $term ) 1368 return new IXR_Error( 404, __( 'Invalid term ID.' ) ); 1369 1370 $result = wp_delete_term( $term_id, $taxonomy_name ); 1371 1372 if ( is_wp_error( $result ) ) 1373 return new IXR_Error( 500, $term->get_error_message() ); 1374 1375 if ( ! $result ) 1376 return new IXR_Error( 500, __( 'Sorry, deleting the term failed.' ) ); 1377 1378 return $result; 1379 } 1380 1381 /** 1382 * Retrieve a term. 1383 * 1384 * @uses get_term() 1385 * @param array $args Method parameters. Contains: 1386 * - int $blog_id 1387 * - string $username 1388 * - string $password 1389 * - string $taxonomy_name 1390 * - string $term_id 1391 * @return array contains: 1392 * - 'term_id' 1393 * - 'name' 1394 * - 'slug' 1395 * - 'term_group' 1396 * - 'term_taxonomy_id' 1397 * - 'taxonomy' 1398 * - 'description' 1399 * - 'parent' 1400 * - 'count' 1401 */ 1402 function wp_getTerm( $args ) { 1403 $this->escape( $args ); 1404 1405 $blog_id = (int) $args[0]; 1406 $username = $args[1]; 1407 $password = $args[2]; 1408 $taxonomy_name = $args[3]; 1409 $term_id = (int) $args[4]; 1410 1411 if ( ! $user = $this->login( $username, $password ) ) 1412 return $this->error; 1413 1414 do_action( 'xmlrpc_call', 'wp.getTerm' ); 1415 1416 if ( ! taxonomy_exists( $taxonomy_name ) ) 1417 return new IXR_Error( 403, __( 'Invalid taxonomy.' ) ); 1418 1419 $taxonomy = get_taxonomy( $taxonomy_name ); 1420 1421 if ( ! current_user_can( $taxonomy->cap->assign_terms ) ) 1422 return new IXR_Error( 401, __( 'You are not allowed to assign terms in this taxonomy.' ) ); 1423 1424 $term = get_term( $term_id , $taxonomy_name, ARRAY_A ); 1425 1426 if ( is_wp_error( $term ) ) 1427 return new IXR_Error( 500, $term->get_error_message() ); 1428 1429 if ( ! $term ) 1430 return new IXR_Error( 404, __( 'Invalid term ID.' ) ); 1431 1432 return $this->_prepare_term( $term ); 1433 } 1434 1435 /** 1436 * Retrieve all terms for a taxonomy. 1437 * 1438 * The optional $filter parameter modifies the query used to retrieve terms. 1439 * Accepted keys are 'number', 'offset', 'orderby', 'order', 'hide_empty', and 'search'. 1440 * 1441 * @uses get_terms() 1442 * @param array $args Method parameters. Contains: 1443 * - int $blog_id 1444 * - string $username 1445 * - string $password 1446 * - string $taxonomy_name 1447 * - array $filter optional 1448 * @return array terms 1449 */ 1450 function wp_getTerms( $args ) { 1451 $this->escape( $args ); 1452 1453 $blog_id = (int) $args[0]; 1454 $username = $args[1]; 1455 $password = $args[2]; 1456 $taxonomy_name = $args[3]; 1457 $filter = isset( $args[4] ) ? $args[4] : array(); 1458 1459 if ( ! $user = $this->login( $username, $password ) ) 1460 return $this->error; 1461 1462 do_action( 'xmlrpc_call', 'wp.getTerms' ); 1463 1464 if ( ! taxonomy_exists( $taxonomy_name ) ) 1465 return new IXR_Error( 403, __( 'Invalid taxonomy.' ) ); 1466 1467 $taxonomy = get_taxonomy( $taxonomy_name ); 1468 1469 if ( ! current_user_can( $taxonomy->cap->assign_terms ) ) 1470 return new IXR_Error( 401, __( 'You are not allowed to assign terms in this taxonomy.' ) ); 1471 1472 $query = array(); 1473 1474 if ( isset( $filter['number'] ) ) 1475 $query['number'] = absint( $filter['number'] ); 1476 1477 if ( isset( $filter['offset'] ) ) 1478 $query['offset'] = absint( $filter['offset'] ); 1479 1480 if ( isset( $filter['orderby'] ) ) { 1481 $query['orderby'] = $filter['orderby']; 1482 1483 if ( isset( $filter['order'] ) ) 1484 $query['order'] = $filter['order']; 1485 } 1486 1487 if ( isset( $filter['hide_empty'] ) ) 1488 $query['hide_empty'] = $filter['hide_empty']; 1489 else 1490 $query['get'] = 'all'; 1491 1492 if ( isset( $filter['search'] ) ) 1493 $query['search'] = $filter['search']; 1494 1495 $terms = get_terms( $taxonomy_name, $query ); 1496 1497 if ( is_wp_error( $terms ) ) 1498 return new IXR_Error( 500, $terms->get_error_message() ); 1499 1500 $struct = array(); 1501 1502 foreach ( $terms as $term ) { 1503 $struct[] = $this->_prepare_term( $term ); 1504 } 1505 1506 return $struct; 1507 } 1508 1509 /** 1510 * Retrieve a taxonomy. 1511 * 1512 * @uses get_taxonomy() 1513 * @param array $args Method parameters. Contains: 1514 * - int $blog_id 1515 * - string $username 1516 * - string $password 1517 * - string $taxonomy_name 1518 * @return array (@see get_taxonomy()) 1519 */ 1520 function wp_getTaxonomy( $args ) { 1521 $this->escape( $args ); 1522 1523 $blog_id = (int) $args[0]; 1524 $username = $args[1]; 1525 $password = $args[2]; 1526 $taxonomy_name = $args[3]; 1527 1528 if ( ! $user = $this->login( $username, $password ) ) 1529 return $this->error; 1530 1531 do_action( 'xmlrpc_call', 'wp.getTaxonomy' ); 1532 1533 if ( ! taxonomy_exists( $taxonomy_name ) ) 1534 return new IXR_Error( 403, __( 'Invalid taxonomy.' ) ); 1535 1536 $taxonomy = get_taxonomy( $taxonomy_name ); 1537 1538 if ( ! current_user_can( $taxonomy->cap->assign_terms ) ) 1539 return new IXR_Error( 401, __( 'You are not allowed to assign terms in this taxonomy.' ) ); 1540 1541 return $this->_prepare_taxonomy( $taxonomy ); 1542 } 1543 1544 /** 1545 * Retrieve all taxonomies. 1546 * 1547 * @uses get_taxonomies() 1548 * @param array $args Method parameters. Contains: 1549 * - int $blog_id 1550 * - string $username 1551 * - string $password 1552 * @return array taxonomies 1553 */ 1554 function wp_getTaxonomies( $args ) { 1555 $this->escape( $args ); 1556 1557 $blog_id = (int) $args[0]; 1558 $username = $args[1]; 1559 $password = $args[2]; 1560 1561 if ( ! $user = $this->login( $username, $password ) ) 1562 return $this->error; 1563 1564 do_action( 'xmlrpc_call', 'wp.getTaxonomies' ); 1565 1566 $taxonomies = get_taxonomies( array(), 'objects' ); 1567 1568 // holds all the taxonomy data 1569 $struct = array(); 1570 1571 foreach ( $taxonomies as $taxonomy ) { 1572 // capability check for post_types 1573 if ( ! current_user_can( $taxonomy->cap->assign_terms ) ) 1574 continue; 1575 1576 $struct[] = $this->_prepare_taxonomy( $taxonomy ); 1109 1577 } 1110 1578
Note: See TracChangeset
for help on using the changeset viewer.