Berichten over ‘code’

Drupal views: view group members (organic groups)

Sunday, 21 December 2008

Wie ooit al in Drupal met Views heeft liggen knoeien, weet dat het niet gemakkelijk is om, bijvoorbeeld, alle leden van een groep in een block af te drukken.
Welnu, na een avond van gevloek en frustraties (ik wist dat het kon, ik had het al ooit eens gedaan, maar wist niet meer hoe) ben ik er dan toch in geslaagd het aan de praat te krijgen zoals het hoort.
Om de medemens en -niet in de laatste plaats- mezelf, het in de toekomst gemakkelijker te maken, kun je hieronder de code gewoon (gratis en voor niks! 😉 ) knippen en plakken.

Ohja, en doe daarna je vrouw/vriendin de groeten, ze zal blij zijn dat je ook aan haar denkt 😉

$view = new view;
$view->name = 'og_members_block';
$view->description = 'Member listing block';
$view->tag = 'og';
$view->view_php = '';
$view->base_table = 'users';
$view->is_cacheable = FALSE;
$view->api_version = 2;
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
$handler = $view->new_display('default', 'Defaults', 'default');
$handler->override_option('fields', array(
  'picture' => array(
    'id' => 'picture',
    'table' => 'users',
    'field' => 'picture',
    'label' => '',
    'relationship' => 'none',
  ),
  'name' => array(
    'id' => 'name',
    'table' => 'users',
    'field' => 'name',
    'label' => '',
    'link_to_user' => 1,
    'relationship' => 'none',
  ),
  'is_admin' => array(
    'id' => 'is_admin',
    'table' => 'og_uid',
    'field' => 'is_admin',
    'label' => '',
    'relationship' => 'none',
  ),
));
$handler->override_option('sorts', array(
  'created' => array(
    'id' => 'created',
    'table' => 'og_uid',
    'field' => 'created',
    'order' => 'DESC',
    'granularity' => 'second',
    'relationship' => 'none',
  ),
));
$handler->override_option('arguments', array(
  'nid' => array(
    'default_action' => 'default',
    'style_plugin' => 'default_summary',
    'style_options' => array(
      'count' => TRUE,
      'override' => FALSE,
      'items_per_page' => 25,
    ),
    'wildcard' => 'all',
    'wildcard_substitution' => 'Alle',
    'title' => '',
    'default_argument_type' => 'php',
    'default_argument' => '',
    'validate_type' => 'og_group_types',
    'validate_fail' => 'empty',
    'break_phrase' => 0,
    'not' => 0,
    'id' => 'nid',
    'table' => 'og_uid',
    'field' => 'nid',
    'add_table' => 0,
    'relationship' => 'none',
    'default_argument_fixed' => '39',
    'default_argument_php' => 'if ($node = og_get_group_context()) {
                return $node->nid;
              }
              else {
                return NULL;
              }',
    'validate_argument_node_type' => array(
      'poll' => 0,
      'event' => 0,
      'group' => 0,
      'page' => 0,
      'startpagina' => 0,
      'story' => 0,
    ),
    'validate_argument_php' => '',
    'require_value' => 0,
    'reduce_duplicates' => 0,
    'validate_argument_vocabulary' => array(
      '1' => 0,
      '2' => 0,
      '3' => 0,
      '4' => 0,
    ),
    'validate_argument_type' => 'tid',
    'default_argument_user' => 0,
    'validate_argument_node_access' => 0,
    'validate_argument_nid_type' => 'nid',
    'validate_argument_is_member' => 0,
    'default_options_div_prefix' => '',
  ),
));
$handler->override_option('filters', array(
  'is_admin' => array(
    'operator' => 'not in',
    'value' => array(
      '1' => '1',
    ),
    'group' => 0,
    'exposed' => FALSE,
    'expose' => array(
      'operator' => FALSE,
      'label' => '',
    ),
    'id' => 'is_admin',
    'table' => 'og_uid',
    'field' => 'is_admin',
    'relationship' => 'none',
    'expose_button' => array(
      'button' => 'Expose',
    ),
  ),
));
$handler->override_option('access', array(
  'type' => 'none',
  'role' => array(),
  'perm' => '',
));
$handler->override_option('title', 'Recent members');
$handler->override_option('empty', 'Niet gevonden');
$handler->override_option('empty_format', '1');
$handler->override_option('use_pager', '1');
$handler->override_option('style_plugin', 'list');
$handler->override_option('style_options', array(
  'type' => 'ul',
));
$handler->override_option('row_options', array(
  'inline' => array(
    'name' => 'name',
    'is_admin' => 'is_admin',
  ),
  'separator' => ' ',
));
$handler = $view->new_display('block', 'Block Admins', 'block');
$handler->override_option('title', 'Group admins');
$handler->override_option('block_description', 'Group admins');
$handler->override_option('block_caching', -1);
$handler = $view->new_display('block', 'Block Admins, Members', 'block_1');
$handler->override_option('block_description', 'Group members');
$handler->override_option('block_caching', -1);

Drupal views: upcoming events per Organic Group

Saturday, 14 March 2009

Je wilt de komende evenementen van een bepaalde groep in een blok tonen op je Drupal website?
En je hebt al uren liggen knoeien met de instellingen?
Probleem opgelost! Importeer volgende code bij je views et voila…
Vergeet zeker je views cache niet te legen wanneer het “now” keyword niet wil werken 😉

$view = new view;
$view->name = 'og_event';
$view->description = 'Volgende keer block';
$view->tag = 'volgende keer';
$view->view_php = '';
$view->base_table = 'node';
$view->is_cacheable = FALSE;
$view->api_version = 2;
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
$handler = $view->new_display('default', 'Defaults', 'default');
$handler->override_option('fields', array(
'field_datum_value' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 0,
'path' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'html' => 0,
),
'link_to_node' => 0,
'label_type' => 'none',
'format' => 'default',
'multiple' => array(
'multiple_number' => '',
'multiple_from' => '',
'multiple_to' => '',
'group' => TRUE,
),
'repeat' => array(
'show_repeat_rule' => '',
),
'fromto' => array(
'fromto' => 'value',
),
'exclude' => 0,
'id' => 'field_datum_value',
'table' => 'node_data_field_datum',
'field' => 'field_datum_value',
'override' => array(
'button' => 'Override',
),
'relationship' => 'none',
),
'title' => array(
'label' => '',
'alter' => array(
'alter_text' => 0,
'text' => '',
'make_link' => 1,
'path' => '',
'alt' => '',
'prefix' => '',
'suffix' => '',
'help' => '',
'trim' => 0,
'max_length' => '',
'word_boundary' => 1,
'ellipsis' => 1,
'html' => 0,
),
'link_to_node' => 1,
'exclude' => 0,
'id' => 'title',
'table' => 'node',
'field' => 'title',
'relationship' => 'none',
'override' => array(
'button' => 'Override',
),
),
));
$handler->override_option('sorts', array(
'field_datum_value' => array(
'id' => 'field_datum_value',
'table' => 'node_data_field_datum',
'field' => 'field_datum_value',
),
));
$handler->override_option('arguments', array(
'group_nid' => array(
'id' => 'group_nid',
'table' => 'og_ancestry',
'field' => 'group_nid',
),
'date_argument' => array(
'default_action' => 'ignore',
'style_plugin' => 'default_summary',
'style_options' => array(),
'wildcard' => 'all',
'wildcard_substitution' => 'Alle',
'title' => '',
'default_argument_type' => 'date',
'default_argument' => '',
'validate_type' => 'none',
'validate_fail' => 'not found',
'date_fields' => array(
'node_data_field_datum.field_datum_value' => 'node_data_field_datum.field_datum_value',
'node_data_field_toeterdate.field_toeterdate_value' => 'node_data_field_toeterdate.field_toeterdate_value',
),
'year_range' => '-3:+3',
'date_method' => 'OR',
'granularity' => 'month',
'id' => 'date_argument',
'table' => 'node',
'field' => 'date_argument',
'override' => array(
'button' => 'Override',
),
'relationship' => 'none',
'default_options_div_prefix' => '',
'default_argument_user' => 0,
'default_argument_fixed' => '',
'default_argument_php' => '',
'validate_argument_node_type' => array(
'poll' => 0,
'faq' => 0,
'event' => 0,
'event2' => 0,
'event3' => 0,
'group' => 0,
'page' => 0,
'startpagina' => 0,
'story' => 0,
),
'validate_argument_node_access' => 0,
'validate_argument_nid_type' => 'nid',
'user_argument_type' => '',
'restrict_user_roles' => 0,
'user_roles' => array(),
'validate_argument_is_member' => 0,
'validate_argument_php' => '',
),
));
$handler->override_option('access', array(
'type' => 'none',
));
$handler->override_option('title', 'Volgende keer');
$handler->override_option('footer', '<br />');
$handler->override_option('footer_format', '2');
$handler->override_option('footer_empty', 0);
$handler->override_option('empty', 'Geen vergaderingen gevonden.');
$handler->override_option('empty_format', '2');
$handler->override_option('items_per_page', 1);
$handler->override_option('use_more', 1);
$handler = $view->new_display('block', 'Blok', 'block_1');
$handler->override_option('filters', array(
'picg' => array(
'operator' => '=',
'value' => '',
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'id' => 'picg',
'table' => 'og_ancestry',
'field' => 'picg',
'override' => array(
'button' => 'Use default',
),
'relationship' => 'none',
),
'date_filter' => array(
'operator' => '>=',
'value' => array(
'value' => '2009-03-14 00:00:00',
'min' => NULL,
'max' => NULL,
'default_date' => 'now',
'default_to_date' => '',
),
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'date_fields' => array(
'node_data_field_datum.field_datum_value' => 'node_data_field_datum.field_datum_value',
),
'date_method' => 'OR',
'granularity' => 'day',
'form_type' => 'date_select',
'default_date' => 'now',
'default_to_date' => '',
'year_range' => '-3:+3',
'id' => 'date_filter',
'table' => 'node',
'field' => 'date_filter',
'override' => array(
'button' => 'Use default',
),
'relationship' => 'none',
),
));
$handler->override_option('block_description', '');
$handler->override_option('block_caching', -1);

Digest access authentication in Titanium

Tuesday, 15 May 2012

Blijkbaar is veiligheid geen prioriteit bij appcelerator en implementeren ze wel basic authentication maar geen digest…
Iemand heeft hen dat ooit al wel eens gezegd bij wijze van feature request maar de priority daarvoor is “low”.
Eitherway, dan maar zelf proberen op te lossen:

	// Let's try to make a connection
	var request = Titanium.Network.createHTTPClient();
	
	request.onload = function() {
		// Because we're using digest authentication
		// we won't get anything here yet
		// but getting a 401 error instead
	};

	request.onerror = function(e) {
		Titanium.API.info("IN 'normal' ERROR: " + JSON.stringify(e));
		if (this.status == 401) {
			wwwAuthString = "" + this.getResponseHeader("WWW-Authenticate");
			// Get all www-Authenticate from the header
			var wwwAuthArray = Array();
			wwwAuthArray = wwwAuthString.split(",");
			var nonceArray = Array();
			// Get the nonce part
			nonce = "" + wwwAuthArray[2];
			// And get rid of nonce=
			nonceArray = nonce.split('"'); // split on "
			nonce = nonceArray[1]; 
			Ti.API.info('nonce = ' + nonce);
			
			// And try again
			var req2 = Titanium.Network.createHTTPClient();
			req2.onload = function(e) {
				alert("SUCCES!: " + JSON.stringify(e));
				Titanium.API.info("In success mode: " + this.responseText);
				// DO SOME OTHER STUFF	
			};
			req2.onerror = function(e) {
				alert("ERROR req2 " + e.error);
			}
			req2.setTimeout(10);
			req2.setRequestHeader("Content-Type","application/json");
			// open the client
			req2.open('GET', 'http://host.tld/path');
			// Populate all vars for digest authentication
			var realm = "REST API";
			var uri = "/path";
			var qop = "auth";
			var nc = '00000002'; // This shouldn't be a fixed value
			var cnonce = "0a4f113b"; // Idem ditto
			var A1 = Ti.Utils.md5HexDigest('username' + ':' + realm + 'password');
			var A2 = Ti.Utils.md5HexDigest('GET'+':'+ uri);
			var resp = Ti.Utils.md5HexDigest(A1 + ':' + nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + A2 );
			// Add authentication'
			var authstr = 'Digest ' + resp; 
			req2.setRequestHeader('Authorization', authstr);
			// send the data
			req2.send();
		}
	};
	
	request.setTimeout(10);
	request.setRequestHeader("Content-Type","application/json");
	// open the client
	request.open('GET', 'http://host.tld/path');
	// send the data
	request.send();

Ik ben er in geslaagd data van de server terug te krijgen die noodzakelijk is voor digest authentication, maar wanneer ik die data naar de server terugstuur loopt het mis en krijg ik alsnog een error. Moest je toevallig een oplossing hiervoor hebben of deze code verder uitpluizen: Let me know 😉