Stuff to create a blog via a webservice.
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Sun, 1 Jun 2008 14:37:09 +0000 (16:37 +0200)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Sun, 1 Jun 2008 14:37:09 +0000 (16:37 +0200)
Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
_public.php
class.xorg.auth.php
page.webservice.php [new file with mode: 0644]
widget.blog.owner.php

index 1403395..e5f5f23 100644 (file)
@@ -3,8 +3,14 @@ require_once dirname(__FILE__) . '/page.auth.php';
 require_once dirname(__FILE__) . '/widget.auth.php';
 require_once dirname(__FILE__) . '/widget.post.perms.php';
 require_once dirname(__FILE__) . '/class.xorg.auth.php';
+require_once dirname(__FILE__) . '/page.webservice.php';
 
-$core->url->register('xorgAuth', 'Xorg', '^auth/(.*)$', array('xorgAuthentifier', 'doAuth'));
+/* Xorg auth */
+$core->url->register('xorgAuth', 'XorgAuth', '^auth/(.*)$', array('xorgAuthentifier', 'doAuth'));
 
+/* Post permission handling */
 $core->addBehavior('coreBlogGetPosts', array('xorgPostPermsWidget', 'behavior_coreBlogGetPosts'));
+
+/* Webservice to create new blog */
+$core->url->register('xorgWebservice', 'XorgWebservice', '^xorgservice/(.*)$', array('XorgWebservice', 'handle'));
 ?>
index 9fa422c..868cdfd 100644 (file)
@@ -56,7 +56,7 @@ class xorgAuth extends dcAuth {
       $cur->user_email = $_SESSION['auth-xorg'] . '@polytechnique.org';
       $cur->user_options = $core->userDefaults();
       $cur->user_options['post_xorg_perms'] = 'public';
-      $cur->user_default_blog = 'default'; // FIXME
+      $cur->user_default_blog = $_SERVER['DC_BLOG_ID'];
       $core->addUser($cur);
     }
   }
diff --git a/page.webservice.php b/page.webservice.php
new file mode 100644 (file)
index 0000000..e4783cb
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+require_once dirname(__FILE__) . '/widget.blog.owner.php';
+
+class XorgWebservice extends dcUrlHandlers {
+  static private function canRunServices() {
+    return true;
+  }
+
+  static public function handle($args) {
+    if (!self::canRunServices()) {
+      header($_SERVER['SERVER_PROTOCOL'] . ' 403 Forbidden');
+      echo "You're not allowed to run the webservices";
+      exit;
+    }
+    $service = null;
+    switch ($args) {
+      case 'createBlog':
+        $service = array('XorgWebservice', $args);
+        break;
+    }
+    if ($service == null) {
+      header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');
+      echo 'Webservice does not handle "' . $args . '"';
+      exit;
+    }
+    global $core;
+    $result = $core->auth->sudo($service);
+    if ($result['status']) {
+      header($_SERVER['SERVER_PROTOCOL'] . ' 200 Success');
+    } else {
+      header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error');
+    }
+    echo $result['message'];
+    exit;
+  }
+
+  static public function createBlog() {
+    global $core;
+    if (!isset($_GET['owner']) || !isset($_GET['url']) || !isset($_GET['type'])) {
+      return array('status' => false,
+                   'message' => 'Missing parameters');
+    }
+    $owner = $_GET['owner'];
+    $url   = $_GET['url'];
+    $type  = $_GET['type'];
+    if ($type != 'user' && $type != 'group-member' && $type != 'group-admin') {
+      return array('status' => false,
+                   'message' => 'Invalid blog type required');
+    }
+    if (isset($_GET['ownername'])) {
+      $ownername = $_GET['ownername'];
+    } else {
+      $ownername = $owner;
+    }
+
+    $cur = new cursor($core->con, 'dc_blog');
+    $cur->blog_id  = $owner;
+    $cur->blog_uid = $owner;
+    $cur->blog_url = $url;
+    $cur->blog_name = 'Blog de ' . $ownername;
+    $cur->blog_status = 1;
+    $core->addBlog($cur);
+
+    $settings = new dcSettings($core, $owner);
+    xorgBlogOwnerWidget::setXorgOwner($settings, $type, $owner);
+
+    return array('status' => true,
+                 'message' => 'blog created');
+  }
+}
+
+?>
index 66a234c..7cf24f4 100644 (file)
@@ -59,12 +59,18 @@ class xorgBlogOwnerWidget {
   }
 
   public static function behavior_adminBeforeBlogSettingsUpdate(&$settings) {
+    self::setXorgOwner($settings, $_POST['xorg_blog_type'], $_POST['xorg_blog_owner']);
+  }
+
+  public static function setXorgOwner(&$settings, $type, $owner) {
     global $core;
     if ($core->auth->isSuperAdmin()) {
-      $settings->put('xorg_blog_type', $_POST['xorg_blog_type'], 'string', 'Type de blog X.org');
-      $settings->put('xorg_blog_owner', $_POST['xorg_blog_owner'], 'string', 'PropriĆ©taire X.org du blog');
+      $settings->setNamespace('xorgauth');
+      $settings->put('xorg_blog_type', $type, 'string', 'Type de blog X.org');
+      $settings->put('xorg_blog_owner', $owner, 'string', 'PropriĆ©taire X.org du blog');
     }
   }
+
 }
 
 ?>