Mercurial > defr > drupal > core
comparison modules/blogapi/blogapi.module @ 9:acef7ccb09b5 6.4
Drupal 6.4
| author | Franck Deroche <webmaster@defr.org> |
|---|---|
| date | Tue, 23 Dec 2008 14:32:08 +0100 |
| parents | c1f4ac30525a |
| children | 589fb7c02327 |
comparison
equal
deleted
inserted
replaced
| 8:85cbd6048071 | 9:acef7ccb09b5 |
|---|---|
| 1 <?php | 1 <?php |
| 2 // $Id: blogapi.module,v 1.115.2.1 2008/02/07 20:11:02 goba Exp $ | 2 // $Id: blogapi.module,v 1.115.2.3 2008/08/13 23:59:13 drumm Exp $ |
| 3 | 3 |
| 4 /** | 4 /** |
| 5 * @file | 5 * @file |
| 6 * Enable users to post using applications that support XML-RPC blog APIs. | 6 * Enable users to post using applications that support XML-RPC blog APIs. |
| 7 */ | 7 */ |
| 127 'blogapi_mt_supported_text_filters', | 127 'blogapi_mt_supported_text_filters', |
| 128 array('array'), | 128 array('array'), |
| 129 t('Retrieve information about the text formatting plugins supported by the server.')), | 129 t('Retrieve information about the text formatting plugins supported by the server.')), |
| 130 array( | 130 array( |
| 131 'mt.publishPost', | 131 'mt.publishPost', |
| 132 'blogap_mti_publish_post', | 132 'blogapi_mt_publish_post', |
| 133 array('boolean', 'string', 'string', 'string'), | 133 array('boolean', 'string', 'string', 'string'), |
| 134 t('Publish (rebuild) all of the static files related to an entry from your blog. Equivalent to saving an entry in the system (but without the ping).'))); | 134 t('Publish (rebuild) all of the static files related to an entry from your blog. Equivalent to saving an entry in the system (but without the ping).'))); |
| 135 } | 135 } |
| 136 | 136 |
| 137 /** | 137 /** |
| 369 $user = blogapi_validate_user($username, $password); | 369 $user = blogapi_validate_user($username, $password); |
| 370 if (!$user->uid) { | 370 if (!$user->uid) { |
| 371 return blogapi_error($user); | 371 return blogapi_error($user); |
| 372 } | 372 } |
| 373 | 373 |
| 374 $usersize = 0; | |
| 375 $uploadsize = 0; | |
| 376 | |
| 377 $roles = array_intersect(user_roles(FALSE, 'administer content with blog api'), $user->roles); | |
| 378 | |
| 379 foreach ($roles as $rid => $name) { | |
| 380 $extensions .= ' '. strtolower(variable_get("blogapi_extensions_$rid", variable_get('blogapi_extensions_default', 'jpg jpeg gif png txt doc xls pdf ppt pps odt ods odp'))); | |
| 381 $usersize= max($usersize, variable_get("blogapi_usersize_$rid", variable_get('blogapi_usersize_default', 1)) * 1024 * 1024); | |
| 382 $uploadsize = max($uploadsize, variable_get("blogapi_uploadsize_$rid", variable_get('blogapi_uploadsize_default', 1)) * 1024 * 1024); | |
| 383 } | |
| 384 | |
| 385 $filesize = strlen($file['bits']); | |
| 386 | |
| 387 if ($filesize > $uploadsize) { | |
| 388 return blogapi_error(t('It is not possible to upload the file, because it exceeded the maximum filesize of @maxsize.', array('@maxsize' => format_size($uploadsize)))); | |
| 389 } | |
| 390 | |
| 391 if (_blogapi_space_used($user->uid) + $filesize > $usersize) { | |
| 392 return blogapi_error(t('The file can not be attached to this post, because the disk quota of @quota has been reached.', array('@quota' => format_size($usersize)))); | |
| 393 } | |
| 394 | |
| 395 // Only allow files with whitelisted extensions and convert remaining dots to | |
| 396 // underscores to prevent attacks via non-terminal executable extensions with | |
| 397 // files such as exploit.php.jpg. | |
| 398 | |
| 399 $whitelist = array_unique(explode(' ', trim($extensions))); | |
| 400 | |
| 374 $name = basename($file['name']); | 401 $name = basename($file['name']); |
| 402 | |
| 403 if ($extension_position = strrpos($name, '.')) { | |
| 404 $filename = drupal_substr($name, 0, $extension_position); | |
| 405 $final_extension = drupal_substr($name, $extension_position + 1); | |
| 406 | |
| 407 if (!in_array(strtolower($final_extension), $whitelist)) { | |
| 408 return blogapi_error(t('It is not possible to upload the file, because it is only possible to upload files with the following extensions: @extensions', array('@extensions' => implode(' ', $whitelist)))); | |
| 409 } | |
| 410 | |
| 411 $filename = str_replace('.', '_', $filename); | |
| 412 $filename .= '.'. $final_extension; | |
| 413 } | |
| 414 | |
| 375 $data = $file['bits']; | 415 $data = $file['bits']; |
| 376 | 416 |
| 377 if (!$data) { | 417 if (!$data) { |
| 378 return blogapi_error(t('No file sent.')); | 418 return blogapi_error(t('No file sent.')); |
| 379 } | 419 } |
| 380 | 420 |
| 381 if (!$file = file_save_data($data, $name)) { | 421 if (!$file = file_save_data($data, $filename)) { |
| 382 return blogapi_error(t('Error storing file.')); | 422 return blogapi_error(t('Error storing file.')); |
| 383 } | 423 } |
| 424 | |
| 425 $row = new stdClass(); | |
| 426 $row->uid = $user->uid; | |
| 427 $row->filepath = $file; | |
| 428 $row->filesize = $filesize; | |
| 429 | |
| 430 drupal_write_record('blogapi_files', $row); | |
| 384 | 431 |
| 385 // Return the successful result. | 432 // Return the successful result. |
| 386 return array('url' => file_create_url($file), 'struct'); | 433 return array('url' => file_create_url($file), 'struct'); |
| 387 } | 434 } |
| 388 /** | 435 /** |
| 485 } | 532 } |
| 486 | 533 |
| 487 /** | 534 /** |
| 488 * Blogging API callback. Publishes the given node | 535 * Blogging API callback. Publishes the given node |
| 489 */ | 536 */ |
| 490 function blogap_mti_publish_post($postid, $username, $password) { | 537 function blogapi_mt_publish_post($postid, $username, $password) { |
| 491 $user = blogapi_validate_user($username, $password); | 538 $user = blogapi_validate_user($username, $password); |
| 492 if (!$user->uid) { | 539 if (!$user->uid) { |
| 493 return blogapi_error($user); | 540 return blogapi_error($user); |
| 494 } | 541 } |
| 495 $node = node_load($postid); | 542 $node = node_load($postid); |
| 565 '#required' => TRUE, | 612 '#required' => TRUE, |
| 566 '#default_value' => variable_get('blogapi_node_types', $defaults), | 613 '#default_value' => variable_get('blogapi_node_types', $defaults), |
| 567 '#options' => $node_types, | 614 '#options' => $node_types, |
| 568 '#description' => t('Select the content types available to external blogging clients via Blog API. If supported, each enabled content type will be displayed as a separate "blog" by the external client.') | 615 '#description' => t('Select the content types available to external blogging clients via Blog API. If supported, each enabled content type will be displayed as a separate "blog" by the external client.') |
| 569 ); | 616 ); |
| 617 | |
| 618 $blogapi_extensions_default = variable_get('blogapi_extensions_default', 'jpg jpeg gif png txt doc xls pdf ppt pps odt ods odp'); | |
| 619 $blogapi_uploadsize_default = variable_get('blogapi_uploadsize_default', 1); | |
| 620 $blogapi_usersize_default = variable_get('blogapi_usersize_default', 1); | |
| 621 | |
| 622 $form['settings_general'] = array( | |
| 623 '#type' => 'fieldset', | |
| 624 '#title' => t('File settings'), | |
| 625 '#collapsible' => TRUE, | |
| 626 ); | |
| 627 | |
| 628 $form['settings_general']['blogapi_extensions_default'] = array( | |
| 629 '#type' => 'textfield', | |
| 630 '#title' => t('Default permitted file extensions'), | |
| 631 '#default_value' => $blogapi_extensions_default, | |
| 632 '#maxlength' => 255, | |
| 633 '#description' => t('Default extensions that users can upload. Separate extensions with a space and do not include the leading dot.'), | |
| 634 ); | |
| 635 | |
| 636 $form['settings_general']['blogapi_uploadsize_default'] = array( | |
| 637 '#type' => 'textfield', | |
| 638 '#title' => t('Default maximum file size per upload'), | |
| 639 '#default_value' => $blogapi_uploadsize_default, | |
| 640 '#size' => 5, | |
| 641 '#maxlength' => 5, | |
| 642 '#description' => t('The default maximum file size a user can upload.'), | |
| 643 '#field_suffix' => t('MB') | |
| 644 ); | |
| 645 | |
| 646 $form['settings_general']['blogapi_usersize_default'] = array( | |
| 647 '#type' => 'textfield', | |
| 648 '#title' => t('Default total file size per user'), | |
| 649 '#default_value' => $blogapi_usersize_default, | |
| 650 '#size' => 5, | |
| 651 '#maxlength' => 5, | |
| 652 '#description' => t('The default maximum size of all files a user can have on the site.'), | |
| 653 '#field_suffix' => t('MB') | |
| 654 ); | |
| 655 | |
| 656 $form['settings_general']['upload_max_size'] = array('#value' => '<p>'. t('Your PHP settings limit the maximum file size per upload to %size.', array('%size' => format_size(file_upload_max_size()))).'</p>'); | |
| 657 | |
| 658 $roles = user_roles(0, 'administer content with blog api'); | |
| 659 $form['roles'] = array('#type' => 'value', '#value' => $roles); | |
| 660 | |
| 661 foreach ($roles as $rid => $role) { | |
| 662 $form['settings_role_'. $rid] = array( | |
| 663 '#type' => 'fieldset', | |
| 664 '#title' => t('Settings for @role', array('@role' => $role)), | |
| 665 '#collapsible' => TRUE, | |
| 666 '#collapsed' => TRUE, | |
| 667 ); | |
| 668 $form['settings_role_'. $rid]['blogapi_extensions_'. $rid] = array( | |
| 669 '#type' => 'textfield', | |
| 670 '#title' => t('Permitted file extensions'), | |
| 671 '#default_value' => variable_get('blogapi_extensions_'. $rid, $blogapi_extensions_default), | |
| 672 '#maxlength' => 255, | |
| 673 '#description' => t('Extensions that users in this role can upload. Separate extensions with a space and do not include the leading dot.'), | |
| 674 ); | |
| 675 $form['settings_role_'. $rid]['blogapi_uploadsize_'. $rid] = array( | |
| 676 '#type' => 'textfield', | |
| 677 '#title' => t('Maximum file size per upload'), | |
| 678 '#default_value' => variable_get('blogapi_uploadsize_'. $rid, $blogapi_uploadsize_default), | |
| 679 '#size' => 5, | |
| 680 '#maxlength' => 5, | |
| 681 '#description' => t('The maximum size of a file a user can upload (in megabytes).'), | |
| 682 ); | |
| 683 $form['settings_role_'. $rid]['blogapi_usersize_'. $rid] = array( | |
| 684 '#type' => 'textfield', | |
| 685 '#title' => t('Total file size per user'), | |
| 686 '#default_value' => variable_get('blogapi_usersize_'. $rid, $blogapi_usersize_default), | |
| 687 '#size' => 5, | |
| 688 '#maxlength' => 5, | |
| 689 '#description' => t('The maximum size of all files a user can have on the site (in megabytes).'), | |
| 690 ); | |
| 691 } | |
| 570 | 692 |
| 571 return system_settings_form($form); | 693 return system_settings_form($form); |
| 572 } | 694 } |
| 573 | 695 |
| 574 function blogapi_menu() { | 696 function blogapi_menu() { |
| 724 } | 846 } |
| 725 } | 847 } |
| 726 | 848 |
| 727 return $types; | 849 return $types; |
| 728 } | 850 } |
| 851 | |
| 852 function _blogapi_space_used($uid) { | |
| 853 return db_result(db_query('SELECT SUM(filesize) FROM {blogapi_files} f WHERE f.uid = %d', $uid)); | |
| 854 } |
