Options saved.

'; } $checked = ''; if($ping == 1) $checked = 'checked="checked"'; echo '

URIs to Ping

The following services will automatically be pinged/notified when you publish posts. Not when you edit previously published posts, as WordPress does by default.

NB: this list is synchronized with the original update services list.

Separate multiple service URIs with line breaks:

Ping log

These are the lastest actions performed by the plugin.


'; } # telling WordPress to ping if the post is new, but not if it's just been edited function SUP_ping_if_new($id) { global $wpdb, $post_title; if(get_option('SUP_ping') == 1 and get_option('ping_sites') != "") { # fetches data directly from database; the function "get_post" is cached, # and using it here will get the post as is was before the last save $row = mysql_fetch_array(mysql_query( "SELECT post_date,post_modified FROM $wpdb->posts WHERE id=$id")); # if time when created equals time when modified it is a new post, # otherwise the author has edited/modified it if($row["post_date"] == $row["post_modified"]) { if($post_title) SUP_log("Pinging services (new post: “".$post_title."”) ..."); else SUP_log("Pinging services (new post) ..."); SUP_ping_services(); # Try commenting the line above, and uncommenting this line below # if pinging seems to be out of order. Please notify the author if it helps! # generic_ping(); } else { if($post_title) SUP_log("NOT pinging services (“".$post_title."” was edited)"); else SUP_log("NOT pinging services (a post was edited)"); } } else SUP_log("NOT pinging services (disabled by administrator)"); } # More or less a copy of WP's "generic_ping" from functions.php, # but uses another function to send the actual XML-RPC messages. function SUP_ping_services() { $services = get_settings('ping_sites'); $services = preg_replace("|(\s)+|", '$1', $services); // Kill dupe lines $services = trim($services); if ( '' != $services ) { $services = explode("\n", $services); foreach ($services as $service) SUP_send_xmlrpc($service); } } # A slightly modified version of the WordPress built-in ping functionality ("weblog_ping" in functions.php). # This one uses correct extendedPing format (WP does not), and logs response from service. function SUP_send_xmlrpc($server = '', $path = '') { global $wp_version; include_once (ABSPATH . WPINC . '/class-IXR.php'); // using a timeout of 3 seconds should be enough to cover slow servers $client = new IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path)); $client->timeout = 3; $client->useragent .= ' -- WordPress/'.$wp_version; // when set to true, this outputs debug messages by itself $client->debug = false; $home = trailingslashit( get_option('home') ); # the extendedPing format should be "blog name", "blog url", "check url" (whatever that is), and "feed url", # but it would seem as if the standard has been mixed up. it's therefore best to repeat the feed url. if($client->query('weblogUpdates.extendedPing', get_settings('blogname'), $home, get_bloginfo('rss2_url'), get_bloginfo('rss2_url'))) { SUP_log("- ".$server." was successfully pinged (extended format)"); } else { # pinging was unsuccessful, trying regular ping format if($client->query('weblogUpdates.ping', get_settings('blogname'), $home)) { SUP_log("- ".$server." was successfully pinged"); } else { SUP_log("- ".$server." could not be pinged. Error message: “".$client->error->message."”"); } } } $post_title = ""; # Receives the title of the post from a filter below function SUP_post_title($title) { global $post_title; $post_title = $title; return $title; } # ----- # Log stuff $logfile = ABSPATH."wp-content/smart-update-pinger.log"; # for debugging function SUP_log($line) { global $logfile; $fh = @fopen($logfile, "a"); @fwrite($fh, strftime("%D %T")."\t$line\n"); @fclose($fh); } function SUP_get_last_log_entries($num) { global $logfile; $lines = @file($logfile); if($lines === false) return "Error reading log file (".$logfile."). This could mean that the wp-content directory is write-protected and no log data can be saved, that you have manually removed the log file, or that you have recently upgraded the plugin."; else { $lines = array_slice($lines, count($lines) - $num); $msg = ""; foreach($lines as $line) $msg .= trim($line)."
"; return $msg; } } # ----- # adds a filter to receive the title of the post before publishing add_filter("title_save_pre", "SUP_post_title"); # adds some hooks # shows the options in the administration panel add_action("admin_menu", "SUP_add_options_page"); # calls SUP_ping whenever a post is published add_action("publish_post", "SUP_ping_if_new"); # calls SUP_ping_draft when changing the status from private/draft to published # add_action("private_to_published', 'SUP_ping_draft'); # removes the "WordPress official" pinging hook remove_action("publish_post", "generic_ping"); # activates pinging if setting doesn't exist in database yet # (before the user has changed the settings the first time) if(get_option("SUP_ping") === false) { update_option("SUP_ping", 1); } ?> The Basics pt.1 | .: Blog.FlashGen.Com :: Mike Jones - Creative Technologist :.

./The Basics pt.1

So how do you actually make a component in Flash MX2004 / 8 utilizing actionscript 2.0?

Well the answer is fairly simple to give, but does open up a plethora of questions… Flash components are formed of two distinct parts:

  • The Class file
  • The Component clip

The Class file must have the same name as the component clip. Therefore if we were making a component called ExampleBox, our component clip would be called ExampleBox as would our class. This does not mean that there can only be one class per component, as with all classes we can instantiate instances of other imported classes within our component class to do specific tasks. As we move further into component development you’ll see that it makes design sense to use specific classes to deal with specific requirements.

Now depending on what type of component you are creating you have the choice of extending from different classes*, if you wish to create a non visual component, like the DataHolder, Remoting connector etc. then you can extend your component from UIObject. If on the other hand you are developing a visual component then you are more likely to extend it from UIComponent or one of the many visual components that subsequently extend directly or indirectly from it – Button, ComboBox, Datagrid, TextInput etc.

*this statement only TRULY applies if you wish to create components that will easily hook into the Adobe (formerly Macromedia) component framework. If that isn’t important to you then you can quite simply start from a base class and build / extend upon it as you develop more components / classes.

The second part of our component is the Component clip itself. This is what will eventually be used to create an SWC, now I tend to keep each component in a separate FLA, but not always, whereas Adobe keep all of theirs together, (it is in a FLA called StandardComponentsFLA.fla and you will find it in ‘yourFlashDir’ > en > configuration > componentFLAs). It is entirely upto you how you store your components so do what you prefer.

To make the component clip create an empty movieClip in your library and name it after your component class – If you don’t know how to do this component development may be a bit advanced for you :P. Once you have the clip created open the Linkage dialog for our new symbol and set the linkage name to the component class name also and while it is still open add in the full package path of your class in the AS 2.0 class field.

For example if we were making a component called ‘ExampleBox’, our movieClip symbol would be called ‘ExampleBox’, as would our Linkage name would be ‘ExampleBox’ and for my class it would read ‘com.flashgen.examples.components.ExampleBox’ as illustrated below.

ExampleBox Linker Dialog

Once we have those set we need to add the class to the Component definitions, again this can be found on the context menu for the movieClip symbol. Once you have added the full class name in the AS 2.0 class field click OK.

Now if you already have your component class created two things will happen, Flash will automatically check your class for any errors before adding in any inherited properties to your component clip, (defined by the meta [Inspectable] – we’ll deal with this and other meta later). And if successful it will change the movieclip icon in the library to the default component icon. If you selected an alternative icon from the component definition dialog then that will be displayed. You can add custom icons but again this we’ll cover off once we get to meta in our class file.

ExampleBox Component Definitions Dialog

If, however, you don’t have the class Flash will throw an exception and tell you in can’t find the class – Something you can live with while we move onto the actual creation of the class.

Before we move onto the class we need to make sure our symbol library is set up correctly – now realistically I could go into great graphic detail about how to lay your folders out but I would suggest grabbing the zip below and just having a look at it (you’ll need it for the next step in creating a component anyway so download it and we can move on :P).

Grab the files here: Basic Component Framework